Как искать в нескольких полях с помощью оператора ИЛИ в ElasticSearch - PullRequest
5 голосов
/ 13 марта 2012

A есть строка, скажем, "Ab Cd"

У меня есть документы с полями: ['a', 'b', 'c', 'd', ... 'z'](не во всех документах есть все поля)

Я хочу выполнить поиск только по полям 'a', 'c', 'f', 'x', но хочу вернуть все поля в документе.

Хит успешен, если ЛЮБОЙ из полей 'a', 'c', 'f', 'x' содержит строку, начинающуюся с 'Ab' или 'Cd'.

Теперь я использую это, но он ищет во всех поляхне в выбранных.

{'query': {'query_string': {'query': "Ab* Cd*"}}}

Ответы [ 2 ]

14 голосов
/ 13 марта 2012

Можно указать список полей, которые вы хотите искать по умолчанию, как часть запроса:

{ 
    "query": { 
        "query_string" : {
            "fields" : ["a", "c", "f", "x"],
            "query" : "Ab* Cd*"
        } 
    }
}

В качестве альтернативы вы можете поставить перед каждым термином имя поля:

{'query': {'query_string': {'query': "a:Ab* c:Ab* f:Ab* x:Ab* a:Cd* c:Cd* f:Cd* x:Cd*"}}}

Отметьте Query String Query страница руководства эластичного поиска, в котором описаны эти и другие полезные параметры.

4 голосов
/ 25 марта 2013

Это именно то, что я искал. В случае, если кто-то ищет Java-версию этого:

 QueryStringQueryBuilder qsqb = new QueryStringQueryBuilder("Ab* Cd*")
          .field("a", 2)
          .field("b")
          .field("c")
          .field("f")
          .field("x");

Вы можете даже использовать повышение уровня поля, если хотите, как показано для поля "a" в приведенном выше коде.

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