2017-01-01 42 views
1

搜索短語的一部分的區域在一個陌生的順序返回結果, 例如,給這個兩個文件Azure的搜索,偏詞搜索不起作用

{ 
      "@search.score": 0.5696786, 
      "Guid": "ce73ca06-f170-46df-b0ef-a6e6e72b76ce", 
      "FirstName": "Ruy", 
      "LastName": "Bssaf", 
      "Phone": "560523791699", 
      "CustomerId": "-1", 
      "CustomerEmail": "[email protected]", 
      "MySuperpharm": "True" 
     }, 
     { 
      "@search.score": 0.5619051, 
      "Guid": "090c623f-5993-458e-93cc-8ef3d885eb29", 
      "FirstName": "ruy", 
      "LastName": "reffen", 
      "Phone": "0522545833", 
      "CustomerId": "76016443160", 
      "CustomerEmail": "[email protected]", 
      "MySuperpharm": "False" 
     }, 

和搜索「的傢伙@ twingoco 「將在第一個文檔之前返回第二個文檔,儘管顯然人們會首先看到第一個文檔,其中」CustomerEmail「字段與短語詞幾乎相同。

搜索是在門戶內部完成的,沒有額外的參數,除了搜索詞。 在搜索完整電子郵件時,預期結果確實是第一位的。

請不要參考這個「電子郵件短語」的具體情況,我一般問如何使搜索也考慮到部分短語。

+0

什麼是您的搜索查詢,以及您是如何在Azure搜索中設置文檔的?您是否將客戶電子郵件標記爲搜索字段? – PartlyCloudy

+0

我正在添加更多信息來回答您的問題 –

+0

嗨,蓋伊,你看到的不是預期的。你可以分享你的確切搜索請求和你看到的搜索分數的反應(在你分享訂單的例子是正確的)。您可以使用Analyze API(https://docs.microsoft.com/en-us/rest/api/searchservice/test-analyzer)查看索引內容和搜索詞彙是如何得到標記的。在你的情況下,電子郵件地址在索引和查詢時都會被分割爲@符號,所以你的搜索查詢會變成:guy twingoco – Yahnoosh

回答

3

這個問題與Lucene如何處理電子郵件地址有關。 Azure搜索使用Lucene分析器作爲其默認分析器:https://lucene.apache.org/core/5_2_0/core/org/apache/lucene/analysis/Analyzer.html

標準Lucene分析器將電子郵件視爲單個標記,這就是爲什麼部分搜索不會爲您創建命中。 (類似於如果你搜索「汽車」,即使它是一個前綴,你也不會受到「小心」的打擊)。更多關於這個問題說明如下:Querying email addresses indexed by lucene

好消息是,你可以創建一個自定義tokanizer這將幫助你解決這個問題:檢查接受的答案Using Lucene to search for email addresses看到一個方法如何實現這樣一個標記,看看本文檔通過Azure搜索查看如何使用自定義分析器:https://azure.microsoft.com/en-gb/blog/custom-analyzers-in-azure-search

祝你好運!

+0

這是一個很好的電子郵件案例解決方案,但我希望在部分術語的任何情況下都要注意搜索。 –

+1

在這種情況下,請檢查這些帖子中提到的前綴分析器。它將爲您的術語的每個前綴創建一個標記。例如,「護理」將創建令牌「c」,「ca」,「car」,「care」,以便部分前綴將創建匹配。 – PartlyCloudy