2013-04-09 43 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*')) 
) 

它工作很好,我很高興,我希望它是這樣的。 但是我意識到我需要添加一個選項來執行此查詢,條件是OR,而不是像現在這樣執行AND

它應該找到匹配任何提供條件的文件。

而這個任務讓我沒有線索(即使是關於完成這個目的的DSL)。

我看過OrFilter,但我不知道如何正確使用它(尤其是使用elasticJS)。彈性/ js的任何固體信息源將不勝感激

+0

難道你不能只把所有的條款放在應該部分?這將成爲一個或然後... – javanna 2013-04-12 09:05:41

+0

優秀(我不是唯一的)。這正是我現在所做的 - 昨天猜到了。我想知道這是否真的是正確的路? – 2013-04-12 20:01:37

+0

是的。爲什麼不? ;)我添加了我的評論作爲一個新的答案。 – javanna 2013-04-13 08:14:51

回答

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); 
相關問題