2017-07-18 60 views
0

我們的客戶在我們的Azure搜索索引上進行查詢,主要針對人名。我們在所有的領域都使用Lucene分析器。我們通過將客戶端的輸入名稱變爲短語來建立查詢字符串,並將接近率增加爲3.因爲我們使用短語進行搜索,所以我們不能使用Lucene分析器的模糊搜索功能,因爲它只能處理單個單詞。Azure搜索 - 語音分析儀問題

因此,我們正在尋找一種解決方案,以便能夠帶回與客戶輸入的拼寫完全不匹配的名稱的結果。我們遇到了語音分析器,並且剛剛在我們的索引中實施了Metaphone算法。我們運行一些測試,雖然它會讓我們更接近我們所需要的,我們還是看到了一些問題:

  1. 分析儀的範圍是如此之廣,它勾起了我很多誤報。例如,當搜索肯尼思古登時,它帶回肯尼思棉花。在我們看來,這只是有點太遠而不能被認爲在語音上相似。敏感度是否可以以任何方式進行調整,或者可以採取一些措施來提高一些其他參數來彌補這一點?

  2. 在Barry Soper搜索時,第一個得分最高的結果是「Barry Spear」。第二項得分較低的結果是「Soper,Barry Russell」。在某種程度上,我可以也許明白爲什麼它的得分方式(第二個名字是第一個名字的第一個),但然後......不是真的。第二個結果包含所需的接近度內的兩個精確詞。也許在應用分析器之前,Azure搜索會優先考慮短語中的單詞順序?對我仍然沒有意義。 (附註 - 這個查詢也帶回了「巴爾超級」 - 見上述問題#1)

我想知道,如果有人可以提供建議,以調整Azure的搜索行爲沿着什麼樣的線條更加努力我們需要,或者,也許建議替代語音分析儀。我們還沒有嘗試任何其他可用的語音算法,但只有B/C看起來,Metaphone是最好的和最常用的。但我們也樂於接受有關其他算法的建議。

謝謝。

回答

2

模糊運算符只適用於單項,這是正確的。在這種情況下,您可以使用自定義分析器(拼音tokenfilter)或同義詞功能(預覽中)。我不確定您的意思是「我們剛剛在我們的索引中實施了Metaphone算法」,但您可以從Azure Search custom analysis stack中選擇幾種語音標記篩選器。同義詞是僅在預覽中可用的較新功能,您可以查看here。對於同義詞,您需要定義同義詞規則,例如說'Nate,Nathan,Nathaniel',並且在查詢時間內,搜索一個自動包含其他結果。

好的,那我該如何使用這些積木來控制我搜索的相關性呢?模型的一種方法是爲每個擴展策略使用單獨的字段。例如,您可以有三個字段,分別是'name','name_synonym'和'name_phonetic',而不是名稱的單個字段。第一個字段'name'用於完全匹配,'name_synonym'字段具有同義詞,第三個字段使用語音分析器並最大限度擴大搜索範圍。然後你可以使用scoring profile來提高每場比賽的分數。例如,您可以爲精確匹配提供10的提升值,爲同義詞提供5的提升值,爲語音擴展提供1。您的搜索將針對這三個內部字段發佈。

關於你爲什麼'Soper,Barry Russell'排名低於'Barry Spear'的問題。語音分析後。'soper'和'spear'這兩個詞在索引和查詢時都縮減爲相同的形式,並被當作是相同的術語。在計算分數和排名時,搜索引擎使用分析形式的詞語和語音相似性不影響分數。這就是爲什麼次要因素,如場地長度,將影響相關性分數發揮更重要的作用。

希望這會有所幫助。我提供了一個示例來建模,但您也可以看看term boosting in the full lucene query syntax

讓我知道你是否還有其他問題。

Nate

+0

非常詳細和有益的迴應,內特。不勝感激!我現在開始深入研究你的建議。僅供參考,關於「我們剛剛在我們的索引中實現了Metaphone算法」,Azure Search允許您從以下幾種不同的語音分析器算法中進行選擇:http://commons.apache.org/proper/commons-codec/archives/1.10 /apidocs/org/apache/commons/codec/language/package-summary.html我們已經實現了Metaphone。 – Stpete111