Эластичный поиск поиск по всем полям и точное совпадение

#elasticsearch

#elasticsearch

Вопрос:

Я очень новичок в эластичном поиске, как мне написать запрос, который ищет ключевое слово (т.Е. проверяйте ключевое слово) во всех полях документа и повышайте для

  1. точное совпадение для этой ключевой фразы во всех полях.
  2. вхождения для определенных полей (которые я увеличил на 5 для A, 3 для B и 1 для C)

Я вижу некоторую документацию по match_phrase, но, похоже, она не поддерживает несколько полей.

 {
    "query": {
        "multi_match": {
            "query": "test keyword",
            "fields": ["A^5", "B^3", "C^1"]
        }
    }
}
  

Комментарии:

1. не могли бы вы поделиться своим отображением индекса, образцом документа индекса и ожидаемым результатом поиска?

Ответ №1:

Если вы хотите получить точное совпадение для ключевой фразы во всех полях вместе с повышением, попробуйте следующий поисковый запрос, где используется запрос с несколькими совпадениями с phrase параметром типа :

Добавление рабочего примера с индексными данными, поисковым запросом и результатом поиска

Индексировать данные:

 {
  "A":"test keyword",
  "B":"a",
  "C":"c"
}
{
  "A":"a",
  "B":"test keyword",
  "C":"c"
}
{
  "A":"a",
  "B":"b",
  "C":"test keyword"
}
  

Поисковый запрос:

 {
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "test keyword",
            "fields": [
              "A^5",
              "B^3",
              "C^1"
            ],
            "type":"phrase"    <-- note this
          }
        }
      ]
    }
  }
}
  

Результат поиска:

 "hits": [
      {
        "_index": "stof_64266554",
        "_type": "_doc",
        "_id": "1",
        "_score": 16.285465,
        "_source": {
          "A": "test keyword",
          "B": "a",
          "C": "c"
        }
      },
      {
        "_index": "stof_64266554",
        "_type": "_doc",
        "_id": "2",
        "_score": 8.142733,
        "_source": {
          "A": "a",
          "B": "test keyword",
          "C": "c"
        }
      },
      {
        "_index": "stof_64266554",
        "_type": "_doc",
        "_id": "3",
        "_score": 1.6285465,
        "_source": {
          "A": "a",
          "B": "b",
          "C": "test keyword"
        }
      }
    ]
  

Комментарии:

1. @StevenZ. спасибо за ваш ответ 🙂 Не могли бы вы принять и поддержать мой ответ 🙂 1 за ваш вопрос 🙂

2. @StevenZ. вы можете принять мой ответ, нажав на большую серую кнопку проверки с левой стороны и проголосовав, нажав на верхний серый треугольник