这里有两个可能的问题。首先:我猜测“内容”字段正在被分析,因此“大多数员工欣赏”不是一个术语,而是三个术语。在这种情况下,将其定义为单个术语是不合适的。
但是,即使列出的内容是单个术语,我们遇到的第二个可能的问题是术语之间的距离太大而无法匹配。mosa employee appreicata
和之间的 Damerau-Levenshtein 距离most employees appreciate
是 4(顺便说一下,我平均第一次拼写“Damerau-Levenshtein”与正确拼写之间的近似距离)。从 4.0 开始,Fuzzy Query 处理的编辑距离不超过 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 的编辑距离,因此这应该更有效。