Термин запрос по вложенным полям не возвращает результата в Elasticsearch - PullRequest
0 голосов
/ 10 октября 2018

У меня есть поле вложенного типа в моем отображении.Когда я использую поисковый запрос Term для моего вложенного поля, результат не возвращается из Elasticsearch, тогда как при изменении запроса Term на Match он работает нормально, и Elasticsearch возвращает ожидаемый результатрезультат

вот мое отображение, представьте, что у меня есть только одно вложенное поле в моем отображении типов

{
"homing.estatefiles": {
    "mappings": {
        "estatefile": {
            "properties": {
                "DynamicFields": {
                    "type": "nested",
                    "properties": {
                        "Name": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "ValueBool": {
                            "type": "boolean"
                        },
                        "ValueDateTime": {
                            "type": "date"
                        },
                        "ValueInt": {
                            "type": "long"
                        }
                    }
                }
            }
        }
    }
}
}

А вот мой запрос запроса (который не возвращает результата)

{
 "from": 50,
  "size": 50,
  "query": {
   "bool": {
   "filter": [
    {
      "nested": {
        "query": {
          "bool": {
            "must": [
              {
                "term": {
                  "DynamicFields.Name":{"value":"HasParking"}
                }
              },
              {
                "term": {
                  "DynamicFields.ValueBool": {
                    "value": true
                  }
                }
              }
            ]
          }
        },
        "path": "DynamicFields"
      }
    }
  ]
  }
 }
}

А вот мой запрос, который возвращает ожидаемый результат (путем изменения запроса Term на запрос Match)

{
 "from": 50,
 "size": 50,
 "query": {
  "bool": {
   "filter": [
    {
      "nested": {
        "query": {
          "bool": {
            "must": [
              {
                "match": {
                  "DynamicFields.Name":"HasParking"
                }
              },
              {
                "term": {
                  "DynamicFields.ValueBool": {
                    "value": true
                  }
                }
              }
            ]
          }
        },
        "path": "DynamicFields"
      }
     }
    ]
   }
 }
}

1 Ответ

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

Это происходит потому, что заглавные буквы с анализатором эластичности.

Когда вы используете term, эластик ищет точное значение, которое вы дали.до сих пор это звучит хорошо, , но , прежде чем оно пытается соответствовать термину, значение, которое вы дали, проходит через анализатор эластичности, который манипулирует вашим значением.Например, в вашем случае он также превратит HasParking в hasparking.

, а затем попытается сопоставить его и, конечно, потерпит неудачу.У них есть отличное объяснение в документации в разделе «Почему запрос термина не соответствует моему документу» .Этот анализатор не активируется для значения при запросе, используя match, и поэтому вы получаете свой результат.

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