упругие символы подстановки в фразе - PullRequest
0 голосов
/ 30 октября 2019

В настоящее время у нас есть поиск, который выполняет буквальный поиск по полному слову. Например, в документах

Привет, мир Привет, мир снова, Привет, прекрасный мир! Мир говорит: привет

q="Hell" returns nothing
q="Hello" returns all 4
q="Hello w" returns nothing
q="hello world" returns the first 2

. Мы можем достичь этого с помощью * и удалив кавычки вокруг запроса. Однако удаление кавычек также останавливает поиск от поиска фразы. Например,

q=Hell* returns all 4 (not a problem)
q=Hello w* returns all 4 (problem; we wanted only the first two)

Кто-нибудь знает, как предотвратить разделение слов "привет" и "w *" на 2 отдельных поиска?

1 Ответ

0 голосов
/ 30 октября 2019

Изменить тип q на ключевое слово - это одно решение, а затем создать нормализатор в нижнем регистре.

{
  "mappings": {
    "doc": {
      "properties": {
        "q": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",    
              "normalizer": "my_custom_normalizer"
            }
          },
          "fielddata": true
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "normalizer": {
        "my_custom_normalizer": {
          "type": "custom",
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}

Запрос поиска:

GET index/_search
{
  "query": {
    "wildcard": {
      "q.keyword": {
        "value": "hello w*"
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...