這裏有兩個可能的問題。首先:我在猜測「內容」字段正在被分析,以至於「大多數員工都會說」不是一個術語,而是三個術語。在這種情況下,定義爲單個術語並不合適。
但是,即使列出的內容是單個術語,但我們可能遇到的第二個問題是術語之間的距離太大以致無法匹配。 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,這應該更有效。
需要額外的詳細信息:您是如何爲內容字段編制索引的?你在用什麼分析儀?您是否嘗試過更近距離的搜索(從確切的詞組開始,然後更改單個字符,...)?你在查詢參數中給了多少緯度?你究竟得到了什麼? –