Как искать термин со средним значением da sh в поиске azure? - PullRequest
0 голосов
/ 24 января 2020

Я учусь использовать поиск azure, и я не нахожу способ поиска термина со средним да sh в поле ItemId, не важно, будет ли термин для поиска в начале или в середина.

У меня есть эти поля с данными в моем индексе

+-----+--------------------+-------------+
| Cat |       ItemId       | Description |
+-----+--------------------+-------------+
| 100 |  400800-1100103U   | desc item 1 |
| 100 |  400800-11001066   | desc item 2 |
| 100 |  400800-11001068   | desc item 3 |
| 101 |  400800-110010F6   | desc item 4 |
+-----+--------------------+-------------+

Это моя конфигурация поля индекса:

+-------------+-------------+-----------+-----------+-----------+------------+
| Field Name  | Retrievable | Filerable |  Sortable | Facetable | Searchable |
+-------------+-------------+-----------+-----------+-----------+------------+
| Cat         |    OK       |    OK     |    OK     |    OK     |    X       |
| ItemId      |    OK       |    OK     |    OK     |    OK     |    OK      |
| Description |    OK       |           |           |           |            |
+-------------+-------------+-----------+-----------+-----------+------------+

И это мой пользовательский анализатор для поля ItemId сгенерировать только один токен, даже если у него есть средний да sh.

{
  "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
  "name": "keyword_lowercase",
  "tokenizer": "keyword_v2",
  "tokenFilters": [
    "lowercase"
  ],
  "charFilters": []
}

Если я ищу по этому запросу: $select=RowKey&search=400800-1100*

, я получаю следующие результаты:

  • 400800-1100103U
  • 400800-11001066
  • 400800-11001068
  • 400800-110010F6

Но если я попробую поискать с средний термин, подобный этому: $select=RowKey&search=RowKey:(00800-1100*)~

Я получаю 0 результатов.

Итак, как мне найти термин со средним значением da sh в ItemId, не важно, если термин для поиска это в начале или в середине?

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Я удаляю анализатор и изменяю GET с помощью POST, используя этот код в теле запроса.

{  
    "queryType": "full",
    "search": "/.*00-11.*/",
    "searchFields": "ItemId",
    "select": "ItemId",
    "count": true,
    "top": 10
} 

Используя полное свойство запроса с синтаксическим анализатором Lucene и регулярным выражением, поиск работает как ожидается.

Обратите внимание, что если вы попытаетесь использовать это регулярное выражение в проводнике поиска запросов в azure, это не вернет никакого результата. Я думаю, что это потому, что поисковик использует запрос GET.

спасибо за ответ Corom - MSFT. Оно работает. Я просто хочу ответить с большей ясностью

1 голос
/ 24 января 2020

Я считаю, что этот пост отвечает на ваш вопрос с помощью поиска по регулярным выражениям, но имеет некоторые соображения. В качестве альтернативы вы можете использовать нечеткий поиск или использовать Edge N-граммовый токенизатор с обратным токеновым фильтром в зависимости от вашего конкретного сценария c.

...