2013-05-20 210 views
5

我在一個模糊查詢使用Solr的,其中越過數據的寶庫,它可能拼寫錯誤的單詞或縮寫詞的工作。例如,存儲庫可以有一個名稱爲「Hlth」(單詞'Health'的縮寫形式)的名稱。模糊搜索Solr中

  1. 如果我做了Name:'Health'~0.35的模糊搜索,我得到的結果是單詞'健康',但不是'Hlth'。
  2. 如果我對Name:'Hlth'~0.35做了模糊搜索,我得到的名字「健康」和「HLTH的記錄。

我想獲得第一的查詢工作。在我的商務用例中,我將不得不使用乾淨的數據來查詢所有拼寫錯誤或縮寫的單詞。

可能有人請幫助,並拋出了爲什麼#1模糊搜索不工作的一些光,如果有殊途同歸的任何其他方式。

回答

4

您以錯誤的方式使用模糊查詢。

據邁克麥坎德利斯說(http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html):

FuzzyQuery匹配術語「接近」指定的基本條件:你從基地指定允許的最大編輯距離,而編輯距離內的任何條款(和包含這些術語的文檔)匹配。

的QueryParser的語法是術語〜或術語〜N,其中N是編輯的最大 允許的數量(對於舊版本n爲一個令人困惑的浮子 0.0和1.0之間,它通過轉換爲等效的最大編輯 距離一個棘手的公式)。

FuzzyQuery是偉大的,匹配的專有名詞:我可以搜索 mcandless〜1和它匹配麥卡(刀片C),mcandles(刪除 S),mkandless(更換具有k c)和許許多多其他的「關閉「條款。 使用最大編輯距離2時,最多可以有2個插入,刪除或 替換。每場比賽的分數取決於該項的編輯距離 ;所以精確的比賽得分最高;編輯距離1, 較低;等

所以你需要寫這樣的疑問 - 生〜2

+0

不起作用!我想匹配百匯和Pkwy,反之亦然。百匯〜2只匹配Parkway和Pkwy〜2只匹配Pkwy –

+0

@Mysterion:FuzzyQuery不工作爲什麼?它試過=「誰是約翰」〜0.2 – iNikkz

2

你寫的:「我想與PKWY匹配百匯」

大路和PKWY有3的編輯距離。您可以通過在「〜3」中爲第一個響應中的「〜2」進行修改,但出於性能原因,建議不要將Solr模糊匹配用於大於2的值。

我想接近你的問題將產生同義詞的具體情況的解釋,並做查詢時擴張的最佳途徑。