SQLite全文搜索目录

时间:2010-12-23 14:57:42

标签: sqlite full-text-search indexing catalog

我想知道对于SQLite,fts(3/4)是否可以使用以下内容。 我使用fts3创建了一个包含一些数据的表。

如果我例如搜索e * i,则获得以^ e开头的所有内容 但我还可以在索引/目录中搜索以e?

开头的特定单词

所以我只能得到那些话的结果;艾略特,elo,eehh。

3 个答案:

答案 0 :(得分:2)

http://www.sqlite.org/fts3.html#section_3

       SELECT * FROM docs WHERE docs MATCH 'lin*';

将返回包含以“lin”开头的单词的文档。你只想要匹配的单词,而不是上下文?也许“片段”功能会对你有所帮助。你可能会发现这个感兴趣的话题:

http://www.mail-archive.com/sqlite-users@sqlite.org/msg49345.html

答案 1 :(得分:2)

FTS引擎通过offsets虚函数提供该信息。

SELECT offsets(docs) FROM docs WHERE docs MATCH 'e*';

正如文件所说:

  

对于使用全文索引的SELECT查询,offsets()函数返回包含一系列以空格分隔的整数的文本值。对于当前行的每个短语匹配中的每个术语,返回列表中有四个整数。每组四个整数解释如下:

     
      
  1. 术语实例出现的列号(0表示FTS表的最左列,1表示下一个最左边的列,等等)。
  2.   
  3. 全文查询表达式中匹配术语的术语编号。查询表达式中的术语按照它们出现的顺序从0开始编号。
  4.   
  5. 列中匹配术语的字节偏移量。
  6.   
  7. 匹配字词的大小(以字节为单位)。
  8.   

如何提取这些信息取决于您以及如何将您的代码与SQLite集成。

答案 2 :(得分:0)

documentation of the snippet function对于其第6个参数相当含糊,因为该算法使用最佳得分方法来查找摘录。

然而,在我的应用程序中,我得到了我正在寻找的原始术语的简洁摘录:

select snippet(docs,'','','', -1, 1) from docs where docs match 'e*';

这可能对你的情况有所帮助;这个数据库内的解决方案帮助了我,因为我不想在db之外的代码中提取术语。如果您正在搜索单个单词(在MATCH查询中没有空格,OR,..)

,它会起作用