Фильтр поиска Azure по всему полю - PullRequest
0 голосов
/ 09 октября 2019

Я пытался создать фильтр, соответствующий концу всего поля текста. Например, взяв текстовое поле с текстом: the brown fox jumped over the lazy dog

Я бы хотел, чтобы оно совпадало с запросом, который ищет поля со значениями, заканчивающимися на g . Примерно так:

{
  "search":"*",
  "queryType":"full",
  "searchMode": "any",
  ...
  "filter":"search.ismatchscoring('/g$/','MyField')"
}

Результатом являются только записи, в которых MyField содержит значения со словами, состоящими из одного символа g в любом месте строки.

Использование фильтранапрямую также не дает результатов:

{
  "search":"*",
  "queryType":"full",
  "searchMode": "any",
  ...
  "filter":"MyField eq '*g'"
}

Насколько я вижу, токенизация всегда будет основой для поиска и фильтра, что означает, что в приведенном выше запросе $ полностью игнорируется, и совпадения будут по слову, а не по полю.

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

1 Ответ

1 голос
/ 10 октября 2019

Одним из возможных решений может быть определение второго поля в вашем индексе с тем же значением, что и «MyField», но с другим анализатором (например, keyword_v2). Таким образом, вы все равно можете выполнять поиск по исходному полю при фильтрации по другому.

Несмотря на это, вы могли бы упростить фильтр для примера, но в противном случае использование search.ismatchscoring(), если не объединять, кажется излишнимс помощью другого предложения фильтра через 'или' - можно напрямую использовать параметр search. Более того, регулярное выражение может не работать, потому что queryType для search.ismatchscoring() по умолчанию простой , а не полный - , см. Документы здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...