为什么我的查询找不到结果,这是完全匹配还是包含?

时间:2017-07-29 14:03:48

标签: lucene

我的索引包含以下数据:

doc.add(new StringField("domain", "examplehouse.com", Field.Store.YES)
doc.add(new StringField("domain", "exampletree.com", Field.Store.YES)
doc.add(new StringField("domain", "exampleapple.com", Field.Store.YES)

现在我正在尝试使用“example”一词返回所有域名:

bq = new BooleanQuery().Builder.add(new TermQuery(new Term("domain", "example")))

indexSearcher.search(bq, 100)

我打印时的查询看起来像:

+domain:example

这是正确的查询类型还是完全匹配?

1 个答案:

答案 0 :(得分:1)

TermQueries始终是完全匹配。在您的情况下,像PrefixQuery这样的基于通配符的查询会更有意义:https://lucene.apache.org/core/6_6_0/core/org/apache/lucene/search/PrefixQuery.html

有多种通配符类型,您应该注意理解这一点:

  • 前缀(多重结束通配符):examp *
  • 单一结尾通配符:exampl?
  • mutli领先的通配符:* ample
  • 单个前导通配符:?xample

旧的但仍然有效的lucene docs链接显示查询语法: https://lucene.apache.org/core/2_9_4/queryparsersyntax.html