我正在尝试编写一个查询,以便对于以下任何查询
Elephant
Elephant is the bigge
Elephant is the biggest land mammal.
Solr 应该能够返回以下结果
Elephant is the biggest land mammal.
我尝试过以下两种方法
field:"query*"
field:"Elephant is the" && field:"bigge*"
第一个查询无法处理最后一个不完整的单词,如查询
Elephant is the bigge
中那样。虽然第二个查询能够处理它,但它并不总是可靠的。有没有更好的方法。
PS: 如果有帮助的话,我正在该字段中使用 text_general
如果这是针对该字段的常见查询,并且字段内容与查询的前缀完全匹配,请考虑使用
string
字段 - 或者如果您希望使用带有 KeywordTokenizer
和 LowercaseFilter
的 TextField不区分大小写 - 这比尝试让 text_general
按您的意愿工作更有效。
停用词可能存在一些问题,但我认为 ComplexPhraseQueryParser 应该可以按照您的意愿工作:
q={!complexphrase inOrder=true}field:"Elephant is the bigge*"
确保将
*
附加到查询中的最后一个术语,以便最后一个术语用作通配符。
您还应该意识到通配符在 Lucene/Solr 中很特殊,因为它们不能使用为字段定义的分析链中的所有常规过滤器 - 因此当您有词干/同义词等时,您可能会得到令人惊讶的结果。对于那个领域。在这种情况下,最好使用专用字段类型,您可以对其进行前缀搜索,如开头所述。