这里有两个可能的问题。首先:我在猜测“内容”字段正在被分析,以至于“大多数员工都会说”不是一个术语,而是三个术语。在这种情况下,定义为单个术语并不合适。
但是,即使列出的内容是单个术语,但我们可能遇到的第二个问题是术语之间的距离太大以致无法匹配。 mosa employee appreicata
和most employees appreciate
之间的Damerau-Levenshtein距离是4(顺便说一下,我在拼写为 “Damerau-Levenshtein”的平均第一次投射和正确拼写之间的近似距离)。从4.0开始,模糊查询处理的编辑距离不超过2,这是由于性能限制,以及较大距离通常不是特别相关的假设。
如果您需要执行的模糊条款短语查询,你应该考虑要么MultiPhraseQuery
,或结合了一套SpanQueries
(尤其是SpanMultiTermQueryWrapper
和SpanNearQuery
),以满足您的需求。
SpanQuery[] clauses = new SpanQuery[3];
clauses[0] = new SpanMultiTermQueryWrapper(new FuzzyQuery(new Term("contents", "mosa")));
clauses[1] = new SpanMultiTermQueryWrapper(new FuzzyQuery(new Term("contents", "employee")));
clauses[2] = new SpanMultiTermQueryWrapper(new FuzzyQuery(new Term("contents", "appreicata")));
SpanNearQuery query = new SpanNearQuery(clauses, 0, true)
而且由于没有一个单独的术语的编辑距离大于2,这应该更有效。
需要额外的详细信息:您是如何为内容字段编制索引的?你在用什么分析仪?您是否尝试过更近距离的搜索(从确切的词组开始,然后更改单个字符,...)?你在查询参数中给了多少纬度?你究竟得到了什么? –