【问题标题】:SQLite full text search catalogSQLite 全文搜索目录
【发布时间】:2010-12-23 14:57:42
【问题描述】:

我想知道使用 SQLite 的 fts(3/4) 是否可以实现以下操作。 我使用 fts3 创建了一个包含一些数据的表。

例如,如果我搜索 e*,我会得到以 ^e 开头的所有内容 但是我也可以在索引/目录中搜索以 e 开头的特定单词吗?

这样我就只能得到那个词的结果了;艾略特,埃洛,嗯。

【问题讨论】:

    标签: sqlite full-text-search indexing catalog


    【解决方案1】:

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

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

    将返回包含以“lin”开头的单词的文档。您只想要匹配的单词,而不是上下文?也许“sn-ps”功能会对您有所帮助。您可能会发现这条感兴趣的线索:

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

    【讨论】:

    • 这将返回一组包含 lin* 的行,但我想要实现的是返回由 sqlite 索引的单词。因此,例如,它应该在您的示例 linux、linear、linwhatever 中返回...但不是包含 lin* 的行
    • 我们同时打字。请参阅附加信息。
    • sn-ps 是我正在寻找的。Sqlite 指示哪些单词与输入进行比较。剩下的唯一事情就是提取单词,这样我们就只能看到确切的单词
    • 很好,Donal 的回答也提供了所需的细节。
    • @Grezly:...what i want to achieve, is to return words that are indexed by sqlite。如果您想查看全文索引中的单词列表,请参阅sqlite.org/fts3.html#fts4aux“直接访问全文索引”。
    【解决方案2】:

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

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

    正如文档所说:

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

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

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

    【讨论】:

      【解决方案3】:

      documentation of the snippet function 的第 6 个参数相当模糊,因为该算法使用最佳得分方法来查找 sn-p。

      尽管如此,在我的应用程序中,我得到了我在请求中寻找的原始条款的清晰摘录:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多