Усиление / взвешивание условий запроса в Elasticsearch - PullRequest
0 голосов
/ 28 мая 2019

У меня есть вопросы (например, «Быстрая коричневая лиса»), где я хочу по-разному оценивать определенные термины.Например, я хочу дать прилагательным * 2 повышение, * 3 повышение для существительных и * 1 для глаголов.

В настоящее время тело запроса, которое я отправляю в функцию Elasticsearch.search () изAPI Python выглядит следующим образом:

body = {
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": {
            "bool": {
              "should": [
                {
                  "multi_match": {
                    "query": "quick brown fox",
                    "type": "most_fields",
                    "fields": ["title^4", "abstract^2", "content"]
                  }
                },
                {
                  "multi_match": {
                    "query": "fairy tale",
                    "type": "most_fields",
                    "fields": ["type^6", "genre^3"]
                  }
                }
              ]
            }
          },
          "filter": {
            "bool": {
              "must": [
                {
                  "range": {
                    "datetime": {
                      "gte": "2018-01-01T00:00:00",
                      "lte": "2018-12-31T23:59:59",
                    }
                  }
                }
              ],
              "must_not": [
                {
                  "ids": {"type": "books", "values": ["1","2"]}
                },
              ]
            }
          }
        }
      },
      "gauss": {
        "datetime": {
          "scale": "30d",
          "decay": 0.5
        }
      }
    }
  }
}

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

Мой вопрос: могу ли я что-то сделать?как "query": "quick^2 brown^2 fox^3"?Каков чистый и лучший способ сделать это?

Я видел возможность иметь отдельное предложение "match" / "multimatch" в предложении "should" для каждой из по-разному усиленных частей запроса (какописал здесь ), но мне интересно, смогу ли я избежать этого громоздкого пути.Похоже, что в этом случае мне нужно будет изменить усиление в каждом поле на основе усиления, которое я хочу дать термину запроса, и я хочу избежать этой неинтуитивной и вводящей в заблуждение конструкции запроса.

...