Многоуровневый вложенный запрос — RequestError Exception 400 — не удалось создать запрос

Я использую Elasticsearch 5.1.1. При выполнении вложенного запроса возвращается ошибка 400

Мой документ будет выглядеть так

{
"_index" : "test",
"_type" : "test_five",
"_source" : {
  "doc" : {
    "keyword_elas" : "elasticsearch",
    }
  },
  "doc_as_upsert" : true }

Это мой код запроса

 {
"query": {
    "nested": {
        "path":"_source",
        "query": {
            "nested": {
                "path": "_source.doc",
                "query": {
                    "match": {
                        "_source.doc.keyword_elas": "elasticsearch"
                    }
                }
            }
        }
    }
}}

Для вышеуказанного запроса я получил исключение

elasticsearch.exceptions.RequestError: TransportError(400, u'search_phase_execution_exception', u'не удалось создать запрос: {\n "вложенный" : {\n "запрос" : {\n "вложенный" : {\n

Является ли это исключением из-за какой-то ошибки запроса? или любая проблема с версией...

Благодарю вас


person Rahul Babu R    schedule 30.12.2016    source источник
comment
В нижней части моего сообщения об ошибке было определенное свойство reason, которое сообщало мне, что мне не удалось правильно создать вложенный тип (при настройке сопоставлений): причинный_by: {тип: недопустимое_состояние_исключение, причина: [вложенный] вложенный объект по пути [комментарии] не вложенного типа }   -  person The Red Pea    schedule 24.04.2017


Ответы (1)


Я не совсем уверен, почему вы используете вложенный запрос в этой среде.

Если у меня есть такой документ:

{
"_index" : "test",
"_type" : "test_five",
"_source" : {
  "doc" : {
    "keyword_elas" : "elasticsearch",
    }
  },
  "doc_as_upsert" : true }

И моя цель — соответствовать полю keyword_elas. Все, что я сделал бы, это:

GET test/test_five/_search
{
    "query": {
        "match" : {
            "keyword_elas" : "elasticsearch"
        }
    }
}

Точные совпадения:

Анализируемое поле:

 GET test/test_five/_search
    {
        "query": {
            "match" : {
                "keyword_elas" : "elasticsearch",
                 "fuzziness": "0"

            }
        }
    }

Примечание. Если у вас есть документ в keyword_elas, который содержит elasticsearch ABC, этот запрос будет работать, потому что он будет иметь нулевую нечеткость на первом токене (elasticsearch).

Для not analyzed fields (полностью точное совпадение)

GET test/test_five/_search
 {
  "query": {
    "term" : { "keyword_elas" : "elasticsearch" } 
  }
}

Если у вас есть два документа в вашем индексе с

keyword_elas : elasticsearch

и

keyword_elas : elasticsearch abc

Термин запрос будет соответствовать только первому документу.

person Yeikel    schedule 30.12.2016
comment
Привет Yeikel, я согласен с этим. Если вам нужен запрос на точное совпадение - каков будет ваш ответ? - person Rahul Babu R; 30.12.2016
comment
Ваше поле анализируется или не анализируется? - person Yeikel; 30.12.2016
comment
для меня первый случай также вызывает исключение. Во втором случае, если значение поля равно 'keyword_elas : термин elasticsearch' - даже поиск elasticsearch возвращает результат. Я хочу, чтобы это было тогда и только тогда, когда я ищу термин elasticsearch, он должен возвращать результат. - person Rahul Babu R; 31.12.2016
comment
Если это так, вам нужно иметь неанализируемое поле и использовать термин запрос. Анализируемое поле будет работать так, как вы объясните. Можете ли вы опубликовать свою карту? - person Yeikel; 31.12.2016
comment
'{ test : { сопоставления : { test_five : { свойства : { doc : { свойства : { keyword_elas : { тип : текст, поля : { ключевое слово : { тип : ключевое слово, ignore_above : 256 } }}}}, doc_as_upsert : {тип : boolean},keyword_elas : {тип : текст, поля : { - person Rahul Babu R; 31.12.2016
comment
выше приведено сопоставление документа - person Rahul Babu R; 31.12.2016
comment
Измените сопоставление keyword_elas с ключевым словом вместо text type:keyword и повторите попытку. - person Yeikel; 31.12.2016
comment
для обновления отображения? нам нужно переиндексировать все отображение ryt? Вы можете помочь мне переназначить в Elasticsearch 5.1? - person Rahul Babu R; 02.01.2017
comment
поиск по запросу - термин не работает. В моем случае значение ключевого слова_elas равно elasticsearch abc, поэтому при поиске {query:{term:{keyword_elas:elasticsearch abc}}} ничего не возвращается, кроме {query:{term:{keyword_elas:elasticsearch}} } возвращает нужные мне документы. - person Rahul Babu R; 02.01.2017
comment
@RahulBabuR 1) Удалите свой индекс 2) Обновите сопоставление 3) Переиндексируйте данные 4) Попробуйте термин запрос в неанализируемом поле. - person Yeikel; 03.01.2017