2013-04-09 3 views
0

Я сделал elastic.js построить динамический запрос, как это:Упругие запрос соответствовать любому из предоставленных условий в BoolQuery

{ 
    "size": 15, 
    "query": { 
     "bool": { 
      "must": [ 
       { "term": { "tag": { "term": "rocket" } } }, 
       { "term": { "name": { "term": "space" } } } 
      ], 
      "should": [ 
       { "wildcard": { "place": { "value": "Moo*" } } } 
      ] 
     } 
    } 
} 

Elastic.js Код для этого (Translator):

ejs.Request() 
    .size(15) 
    .query(
     ejs.BoolQuery() 
     .must(ejs.TermQuery('tag', 'rocket')) 
     .must(ejs.TermQuery('name', 'space')) 
     .should(ejs.WildcardQuery('place', 'Moo*')) 
) 

It отлично работает, я счастлив, и я бы хотел, чтобы это было так. Но Я понял, что мне нужно добавить параметр для выполнения этого запроса с условием OR, а не AND как сейчас.

Он должен найти документы, которые соответствуют любым из предоставленных условий.

И эта задача оставляет меня без каких-либо подсказок (даже о DSL, которая завершит эту задачу).

Я посмотрел OrFilter, но я понятия не имею, как использовать его правильно (особенно с эластичнымJS). Любой надежный источник информации об эластичных/js будет с благодарностью

+0

Не можете ли вы просто поместить все предложения в секцию should? Это станет OR, тогда ... – javanna

+0

Отлично (я не единственный). Это именно то, как я это сделал сейчас, - догадался он вчера. Интересно, действительно ли это правильный путь? –

+0

Да, это так. Почему нет? ;) Я добавил свой комментарий в качестве нового ответа. – javanna

ответ

1

Вы можете поместить все свои предложения в секцию should bool query.

Относительно elastic.js Я лично считаю, что это отличная программа, хорошо документированная. Посмотрите на его API documentation.

0
var r = ejs.Request({indices: index, types: type}), 
    boolQ = ejs.BoolQuery(); 

boolQ.should(ejs.FieldQuery("DEAL_NAME","value")).defaultOperator("AND")); 
boolQ.should(ejs.TermQuery("DEAL_MOTTO","value"));      
boolQ.should(ejs.FieldQuery("dealaddresses.CITY","value").defaultOperator("AND")); 

r.query(boolQ); 
Смежные вопросы