ElasticSearch расширенный запрос query_string - PullRequest
1 голос
/ 12 февраля 2020

Мне нужно, чтобы elasti c выполнял поиск в нескольких полях и возвращал данные по приоритету поля.

Например: для строки поиска obil hon, elasti c должен искать в полях [title, description, modelCaption] и возвращать данные, когда сначала он находит Mobile Phone в поле Title, затем в других полях.

Запрос, который я использую:

{
  "from": 0,
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_operator": "or",
            "fields": [
              "title^5",
              "description",
              "modelCaption",
              "productFeatureValues.featureValue",
              "productFeatureValues.featureCaption"
            ],
            "query": "*obil* *hone*"
          }
        }
      ]
    }
  },
  "size": 16
}

Есть предложения?

Спасибо!

1 Ответ

1 голос
/ 12 февраля 2020

Вы можете просто использовать запрос с несколькими совпадениями для запроса нескольких полей, и он поддерживает увеличение определенного поля, например title в вашем случае, и различных операторов, таких как OR в вашем случае.

Пример ES-запроса для вашего варианта использования:

{
  "query": {
    "multi_match" : {
      "query" : "mobile phones",
      "fields" : [ "title^5", "description","modelCaption","productFeatureValues.featureVal"],
      "fuzziness" : "AUTO" --> Adding fuzziness to query
    }
  }
}

Здесь поле заголовка увеличивается в 5 раз, поэтому, если мобильные телефоны совпадают в поле заголовка, то оно будет набрано выше.

Также обратите внимание, что вы используете подстановочные знаки в строке запроса, что очень дорого, поэтому лучше их избегать, если можете.

РЕДАКТИРОВАТЬ: На основе в комментариях OP, включенный параметр нечеткости AUTO в запрос для улучшения результатов

...