ElastiSearch Query: Как выполнить встроенный «расчет» между полями, а затем использовать его в качестве переменной повышения? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть Книжный указатель с полями, похожими на эти:

{
    "title": "To Kill a Mockingbird",
    "summary": "To Kill a Mockingbird takes place in Alabama during the Depression..",
    "type": "book",
    "views": 36
},
{
    "title": "The Genius of Birds",
    "summary": "The Genius Of Birds shines a new light on a genuinely underrated kind..",
    "type": "book",
    "views": 10
},
{
    "title": "Handbook of Bird Biology",
    "summary": "The Handbook of Bird Biology is an essential reference for birdwatchers..",
    "type": "book",
    "views": 27
}

В ElasticSearch v5.1 ниже мой текущий простой запрос, который работает сам по себе:

{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "type": "book"
              }
            }
          ]
        }
      },
      "must": {
        "multi_match": {
          "query": "the bird",
          "fields": [
            "title",
            "summary"
          ]
        }
      }
    }
  }
}

(Поиск слов the bird из полей: title, summary, где type должно быть book)

Это дает мне простой результат на основев полях title и summary.Но мне нужно, чтобы его немного изменили.

Можно ли изменить запрос так, чтобы он выглядел примерно так:

    ..
    "must": {
      "multi_match": {
        "query": "the bird",
        "fields": [
          "title^(0.1*views)",
          "summary"
        ]
      }
    }
    ..

Я не знаю, как вызвать его в ES, но в основном я хочу увеличить поле (title) другим полем (view).

Или в простейшей форме, что-то вроде:

field1^(field2)

1 Ответ

0 голосов
/ 16 мая 2018

Спасибо Aarchit Saxena за подсказку в разделе комментариев.Теперь я знаю, что он называется field_value_factor, а затем, изучив его дальше, я наконец-то сумел получить нужный мне запрос.

Исходный запрос (см. Выше) теперь выглядит следующим образом:

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "filter": {
            "bool": {
              "must": [
                {
                  "term": {
                    "type": "book"
                  }
                }
              ]
            }
          },
          "must": {
            "multi_match": {
              "query": "the bird",
              "fields": [
                "title",
                "summary"
              ]
            }
          }
        }
      },
      "functions": [
        {
          "field_value_factor": {
            "field": "views",
            "factor": 1,
            "modifier": "none",
            "missing": 1
          }
        }
      ],
      "boost": 1,
      "boost_mode": "multiply"
    }
  }
}

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...