Duo*_*SRX 5 mysql sqlite lucene
我实际上正在研究一个Symfony项目,我们正在使用Lucene作为我们的搜索引擎.我试图使用SQLite内存数据库进行单元测试(我们正在使用MySQL),但我偶然发现了一些东西.
该项目的搜索引擎部分使用Lucene索引.基本上,您查询它并获得一个有序的id列表,您可以使用它来查询Where In()子句中的数据库.问题是查询中有一个ORDER BY Field(id,...)子句,它以与Lucene返回的结果相同的顺序排序结果.
是否有使用SQLite的ORDER BY Field的替代方法?或者是否有其他方式以与Lucene相同的方式订购结果?
谢谢 :)
编辑:
简化查询可能如下所示:
SELECT i.* FROM item i
WHERE i.id IN(1, 2, 3, 4, 5)
ORDER BY FIELD(i.id, 5, 1, 3, 2, 4)
Run Code Online (Sandbox Code Playgroud)
这非常令人讨厌和笨重,但它应该可以工作。创建一个临时表,并插入 Lucene 返回的有序 ID 列表。将包含项目的表连接到包含有序 ID 列表的表:
CREATE TABLE item (
id INTEGER PRIMARY KEY ASC,
thing TEXT);
INSERT INTO item (thing) VALUES ("thing 1");
INSERT INTO item (thing) VALUES ("thing 2");
INSERT INTO item (thing) VALUES ("thing 3");
CREATE TEMP TABLE ordered (
id INTEGER PRIMARY KEY ASC,
item_id INTEGER);
INSERT INTO ordered (item_id) VALUES (2);
INSERT INTO ordered (item_id) VALUES (3);
INSERT INTO ordered (item_id) VALUES (1);
SELECT item.thing
FROM item
JOIN ordered
ON ordered.item_id = item.id
ORDER BY ordered.id;
Run Code Online (Sandbox Code Playgroud)
输出:
thing 2
thing 3
thing 1
Run Code Online (Sandbox Code Playgroud)
是的,这是一种让人不寒而栗的 SQL,但我不知道有与ORDER BY FIELD.
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |