Как искать по элементам массива вasticsearch? - PullRequest
7 голосов
/ 24 июня 2011

У меня есть документ, проиндексированный вasticsearch:

{
    "content":"Some content with @someone mention",
    "mentions":["someone"],
    "userId":"4dff31eaf8815f4df04e2d62"
}

Я пытаюсь найти его с помощью запроса:

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                term: {"mentions":"someone"}
            }
        }
    }
}

и не получаю результатов.

Вв то же время запрос контента работает нормально:

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                "term": {"content":"some"}
            }
        }
    }
}

Требуется ли какой-то особый синтаксис для поиска по массивам?Я нашел несколько тем [ 1 , 2 ] о массивах вasticsearch, но прямого ответа нет.

UPD Get Mapping возвращает вызовследующий результат:

{
    "records": {
        "all":{
            "properties":{
                "content":{"type":"string"},
                "userId":{"type":"string"},
                "mentions":{"type":"string"}
            }
        }
    }
}

UPD2 Я нашел источник проблемы.Я случайно ввел ошибку в свой вопрос.Имя пользователя, которое я на самом деле имел в БД, было в форме "some_one" (подчеркивание является значительным).Таким образом, стандартный индекс разделил его на 2 слова и запросил «some_one» причины сбоя.

1 Ответ

2 голосов
/ 10 августа 2012

Это правильное использование, как упоминается в вашем обновлении.

Если вы импортируете документ с массивом «упоминаний», поиск соответствующего элемента массива, называемый «упоминаниями», приведет к извлечению документа.,У меня была та же самая проблема, и я только что проверил ее.

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