【问题标题】:Lucene Search Query for multiple values in a tokenised indexLucene Search 查询标记化索引中的多个值
【发布时间】:2014-08-06 07:07:38
【问题描述】:

我对 Lucene 索引很陌生。我有一个表,其中包含字段 ID、NAME 和 NATIONALITY 都使用 NGRAM Analyzer(2,2) 编制索引。现在我需要从表中查询一个 ID 列表(比如 12345 和 98765)。我该怎么做?

我试过这样的布尔查询:

BooleanQuery.add("ID:"12 23 34 45" ,Occur.SHOULD);
BooleanQuery.add("ID:"98 87 76 65" ,Occur.SHOULD);

由于索引是使用最大语法宽度为 2 的 Ngram Analyzer 完成的。它获取列表并将其标记为 2 的集合并搜索它;结果 - 我得到一个包含这么多值的 ID 列表。

我尝试了 Occur.MUST。但返回 0 个结果。

【问题讨论】:

    标签: lucene


    【解决方案1】:

    在查询语法中,我想你想要:

    ( +12 +23 +34 +45 ) ( +98 +87 +76 +65 )
    

    这将返回所有 (12, 23, 34, 45) 或所有 (98, 87, 76, 65) 的命中。基本上,来自 ID 的 ngram 本身是 MUST 查询,包装在 SHOULD 查询中(这种包装是秘诀)。

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多