Можно ли в запросе multi_match повысить релевантность термина аналогично тому, как это происходит с релевантностью поля? - PullRequest
0 голосов
/ 22 января 2019

Итак, мы знаем, что можно повысить релевантность поля , используя каретку (^), за которой следует число, например:

{
    "query": {
        "multi_match": {
            "query": "something of value",
            "fields": [ "name^2", "category" ]
        }
    }
}

Но применение той же логики к термину (query) не повышает его актуальность:

{
    "query": {
        "multi_match": {
            "query": "something^3 of value",
            "fields": [ "name", "category" ]
        }
    }
}

То, что я хочу сделать, это увеличить первое слово query, поэтому мы надеемся, что документы, имеющие это слово в начале каждого поля в fields, имеют приоритет.

Я пробовал что-то с span_term (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-term-query.html), но это не поддерживает multi_match.

Есть идеи?

1 Ответ

0 голосов
/ 22 января 2019

Короче говоря, чтобы ответить на ваш вопрос: Нет, это невозможно в запросе с несколькими совпадениями.Один из способов повысить условия - это Query String Query.

TLDR;

Я думаю, что вы неправильно поняли запрос с несколькими совпадениями.

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

Вместо него можно использовать Запрос строки запроса

Я создаю два документа

PUT test/_doc/5
{
  "name": "Something Blue Something Borrowed Something New",
  "category": "Comedy"
}
PUT test/_doc/6
{
  "name": "There's Something About Mary",
  "category": "Comedy"
}

Поиск, усиление синего

GET test/_search
{
    "query": {
        "query_string" : {
            "default_field" : "name",
            "query" : "Something Blue^2"
        }
    }
}

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

{
  "took" : 4,
  "hits" : {
    "total" : 2,
    "max_score" : 1.027436,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.027436,
        "_source" : {
          "name" : "Something Blue Something Borrowed Something New",
          "category" : "Comedy"
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : 0.7590336,
        "_source" : {
          "name" : "There's Something About Mary",
          "category" : "Comedy"
        }
      }
    ]
  }
}

Если вы попросите объяснить API

GET test/_doc/5/_explain
{
    "query": {
        "query_string" : {
            "default_field" : "name",
            "query" : "Something Blue^2"
        }
    }
}

Соответствующие объяснить результат

{
        "value" : 0.5753642,
        "description" : "weight(name:blue in 0) [PerFieldSimilarity], result of:",
        "details" : [
          {
            "value" : 0.5753642,
            "description" : "score(doc=0,freq=1.0 = termFreq=1.0\n), product of:",
            "details" : [
              {
                "value" : 2.0,
                "description" : "boost",
                "details" : [ ]
              },
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...