如何在上一项不完整的情况下运行 solr 查询?

问题描述 投票:0回答:1

我正在尝试编写一个查询,以便对于以下任何查询

  1.  
  2. Elephant
  3. Elephant is the bigge
  4. Elephant is the biggest land mammal.

Solr 应该能够返回以下结果

Elephant is the biggest land mammal.

我尝试过以下两种方法

  1. field:"query*"
  2. field:"Elephant is the" && field:"bigge*"

第一个查询无法处理最后一个不完整的单词,如查询

Elephant is the bigge
中那样。虽然第二个查询能够处理它,但它并不总是可靠的。有没有更好的方法。

PS: 如果有帮助的话,我正在该字段中使用 text_general

solr
1个回答
0
投票

如果这是针对该字段的常见查询,并且字段内容与查询的前缀完全匹配,请考虑使用

string
字段 - 或者如果您希望使用带有
KeywordTokenizer
LowercaseFilter
的 TextField不区分大小写 - 这比尝试让
text_general
按您的意愿工作更有效。

停用词可能存在一些问题,但我认为 ComplexPhraseQueryParser 应该可以按照您的意愿工作:

q={!complexphrase inOrder=true}field:"Elephant is the bigge*"

确保将

*
附加到查询中的最后一个术语,以便最后一个术语用作通配符。

您还应该意识到通配符在 Lucene/Solr 中很特殊,因为它们不能使用为字段定义的分析链中的所有常规过滤器 - 因此当您有词干/同义词等时,您可能会得到令人惊讶的结果。对于那个领域。在这种情况下,最好使用专用字段类型,您可以对其进行前缀搜索,如开头所述。

© www.soinside.com 2019 - 2024. All rights reserved.