sqlite与正常索引相交的全文结果

时间:2014-01-08 16:14:22

标签: sql sqlite full-text-search

我有两个表:osm和osm_fulltext。第二个表是全文索引,第一个表是常用表。两者都有id = 732048494

的记录
sqlite> SELECT objectid FROM osm where objectid=732048494;
732048494

sqlite> SELECT objectid FROM osm_fulltext where objectid MATCH 732048494;
732048494

但是当我与结果相交时,我什么也得不到:

SELECT objectid 
   FROM osm_fulltext 
WHERE objectid MATCH 732048494 

   INTERSECT 

SELECT objectid 
   FROM osm 
WHERE objectid=732048494;

源码>

交叉点应该适用于不同类型的存储吗?

1 个答案:

答案 0 :(得分:0)

FTS表将所有数据存储为文本,因此您的ID将作为字符串返回,这与数字不同:

> SELECT 42 INTERSECT SELECT 42;
42
> SELECT 42 INTERSECT SELECT '42';

您可以将ID转换为数字:

SELECT CAST(objectid AS NUMBER) FROM osm_fulltext

但是对于用于搜索表记录的ID,最好使用implicit docid column

INSERT INTO osm_fulltext(docid, whatever) VALUES(732048494, 'hello');
SELECT * FROM osm_fulltext WHERE docid = 732048494;