【问题标题】:Full text search on subset of fields in SQLite 3.7.4在 SQLite 3.7.4 中对字段子集进行全文搜索
【发布时间】:2015-11-21 17:30:45
【问题描述】:

上下文

我有一个表指定为

CREATE VIRTUAL TABLE EmailAttachmentSearch USING 
fts4(entityId Varchar(255), name, subject, type, group, from, json);

要求

我需要允许用户搜索namesubjecttypegroupfrom

条件

我知道notindexed 选项,但由于多平台兼容性,我们仅限于不支持notindexed 的SQLite 3.7.4。

问题

我正在尝试构建一个等效于 MATCH 'word1* word2*' 但将排除 entityIdjson 字段的查询。

我的尝试总是导致没有数据或数据过多。

无效示例

SELECT json
FROM EmailAttachmentSearch
WHERE EmailAttachmentSearch MATCH 
     '(name:word1* 
    OR type:word1* 
    OR subject:word1* 
    OR from:word1*)
AND   (name:word2* 
    OR type:word2* 
    OR subject:word2* 
    OR from:word2*)'

【问题讨论】:

  • FTS 没有后缀搜索;您不能将 * 放在搜索词的开头。
  • MATCH '"*word1* *word2*"' 似乎有效?
  • 找到xxxword1了吗?
  • 其实你是对的
  • 知道如何做我要求的事情吗?

标签: sql sqlite full-text-search multiple-columns


【解决方案1】:

看起来 SQLite 查询引擎不支持 MATCH 部分中的此类复杂条件。我做了更多的研究,发现当你使用子查询时它工作得很好。

 SELECT json FROM EmailAttachmentSearch WHERE ROWID IN (
     SELECT ROWID FROM EmailAttachmentSearch WHERE EmailAttachmentSearch MATCH 'name:word1* OR type:word1* OR subject:word1* OR from:word1*'
     AND ROWID IN (
         SELECT ROWID FROM EmailAttachmentSearch WHERE EmailAttachmentSearch MATCH 'name:word2* OR type:word2* OR subject:word2* OR from:word2*'
     )
 );

这里的原始答案:

How do you match multiple column in a table with SQLite FTS3?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多