2017-01-01 2 views
1

Поиск частичной части фразы возвращает результаты в странном порядке, , например, давая эти два документаAzure-Search, частичное слово поиск не работает

{ 
      "@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

Привет, Гай, то, что вы видите, не ожидается. Можете ли вы поделиться точным поисковым запросом и ответом, который вы видите с результатами поиска (в приведенном вами примере порядок указан правильно). Вы можете увидеть, как индексированный контент и поисковый запрос становятся токенированными с помощью 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