2017-01-01 41 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