_ Объясните запрос, пожалуйста, объясните, почему пункты выглядят так - PullRequest
0 голосов
/ 10 октября 2018

Я перевожу ES 2.x в ES 6.4, и для одного из запросов я получаю разные результаты (оба запроса и объяснения - из ES 6.4)

Это часть моего запроса:

"multi_match": {
        "query": "nike xl",
        "type": "cross_fields",
        "fields": [
          "name^10",
          "variants.params^10",
          "*desc^5",
          "manufacturer",
          "categories"
        ],
        "operator": "and",
        "minimum_should_match": 1
      }

И вот объяснение, как взорвалось это multi_match:

"explanation" : {
"value" : 0.0,
"description" : "Failure to meet condition(s) of required/prohibited clause(s)",
"details" : [
  {
    "value" : 0.0,
    "description" : "no match on required clause (((variants.code:*NIKE XL*)^15.0 (((+((shortdesc:nik)^5.0 | (name:nik)^10.0 | categories:nik | (variants.params:nik)^10.0 | (longdesc:nik)^5.0) +((shortdesc:xl)^5.0 | (name:xl)^10.0 | categories:xl | (variants.params:xl)^10.0 | (longdesc:xl)^5.0))~1) | manufacturer:nike xl) (name_na:*xl*)^10.0 #type:product)~1)",

Обратите внимание на одну вещь.Все поля с fields в поиске по запросу на nik, а затем также на xl.Но производитель не делает, он ищет nike xl там.И я считаю, что именно поэтому документ не найден.Кто-нибудь знает почему это так?

1 Ответ

0 голосов
/ 16 октября 2018

Я подумал, что это проблема operator, которая вызывает проблему.Я нигде не смог найти в документации, что означает operator в контексте type=cross_fields.Документация гласит:

In other words, all terms must be present in at least one field for a document to match.

взято из https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#type-cross-fields

Что для меня означает, что operator здесь на самом деле не нужен.Когда я его убрал, я начал получать результаты, как и ожидалось.Обратите внимание, что в ES 2.4 это ведет себя по-другому (как если бы operator был проигнорирован)

...