Elasticsearch повышает важность точного соответствия фразе - программирование
Подтвердить что ты не робот

Elasticsearch повышает важность точного соответствия фразе

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

Например, если бы я искал фразу "веб-разработчик", и если бы слова "веб-разработчик" появились вместе, они были бы увеличены на 5 по сравнению с "веб" и "разработчиком", появляющимися отдельно по всему документу. Таким образом, любой документ, содержащий "веб-разработчика" вместе, будет отображаться первым в результатах.

4b9b3361

Ответ 1

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

Что-то вроде следующего:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "field": "web developer"
          }
        },
        {
          "match_phrase": {
            "field": "web developer",
            "boost": 5
          }
        }
      ],
      "minimum_number_should_match": 1
    }
  }
}

Ответ 2

В качестве альтернативы answer javanna вы можете сделать что-то подобное с предложениями must и should в запросе bool:

{
  "query": {
    "bool": {
      "must": {
          "match": {
            "field": "web developer",
            "operator": "and"
          }
      },
      "should": {
          "match_phrase": {
            "field": "web developer"
          }
      }
    }
  }
}

Неподтвержденный, но я считаю, что предложение must здесь будет соответствовать результатам, содержащим как "веб", так и "разработчик", а предложение should будет забивать фразы, соответствующие "веб-разработчику" выше.

Ответ 3

Вы можете попробовать использовать rescore, чтобы выполнить точное совпадение фразы по вашим первоначальным результатам. Из документов:

"Rescoring может помочь повысить точность, переупорядочивая только верхние (например, 100 - 500) документы, возвращаемые этапами запроса и post_filter, используя вторичный (обычно более дорогостоящий) алгоритм вместо того, чтобы применять дорогостоящий алгоритм ко всем документам в индекс."

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-rescore.html

Ответ 4

Я использовал ниже пример запроса в моем случае, который работает. Он дает точные + нечеткие результаты, но точные повышаются!

{ "query": {
"bool": {
  "should": [
    {
      "match": {
        "name": "pala"
      }
    },
    {
      "fuzzy": {
        "name": "pala"
      }
    }
  ]
}}}

Ответ 5

Я думаю, что его поведение по умолчанию уже с запросом соответствия или "оператором". Сначала будет фильтровать фразу "веб-разработчик", а затем такие термины, как "web" или "develeper". Хотя вы можете повысить свой запрос, используя приведенные выше ответы. Исправьте меня, если я ошибаюсь.