2016-11-21 144 views
0

我想使用URI搜索(q =)在ElasticSearch中執行AND操作。我該怎麼做?如何在URI中搜索多個字段搜索

如果我有以下文檔: [{「name」:「Test 1」,「pub」:「2」},{「name」:「Test 2」,「pub」:「1」}, {「name」:「A」,「pub」:「1」}]

我想查詢包含名稱包含「測試」和其中酒吧等於「1」的文檔。我怎麼做?

謝謝!

+0

你的映射是怎樣的?正如下面的「答案」所暗示的那樣,你的字段需要嵌套,你將無法使用'q = ...'查詢它,你需要一個完整的''嵌套'查詢。 – Val

+0

因此,爲了能夠將GET的JSOB正文發送到_search,查詢DSL? –

+0

看到我的答案 – Val

回答

0

假設你的文件看起來是這樣的:

{ 
    "my_field": [ 
     { "name":"Test 1", "pub":"2"}, 
     { "name":"Test 2", "pub":"1"}, 
     { "name":"A", "pub":"1"} 
    ] 
} 

my_field映射是nested相似類型的這樣:

{ 
    "mappings": { 
    "doc_type": { 
     "properties": { 
     "my_field": { 
      "type": "nested", 
      "properties": { 
      "name": { "type": "string" }, 
      "pub": {"type": "integer" } 
      } 
     } 
     } 
    } 
    } 
} 

然後你就可以查詢索引和用以下nested查詢預期文檔:

POST /_search 
{ 
    "query": { 
    "nested": { 
     "path": "my_field", 
     "query": { 
     "bool": { 
      "filter": [ 
      { 
       "match": { 
       "name": "Test" 
       } 
      }, 
      { 
       "match": { 
       "pub": 1 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

所以,如果我改變,所以使用嵌套類型,而不是...我會然後能夠做一個查詢字符串,如:_search?q = this:100 and that:> 100 這個和那個領域? 因爲我認爲Elaticsearch可以在任何字段組合上完全搜索,所以doc.myList.this.item:Who AND doc.userData.that.name:Test –

+0

查詢字符串查詢支持所有類型的查詢...除了父/子文檔和嵌套字段(請參閱[公開問題](https://github.com/elastic/elasticsearch/issues/16551)) – Val

+0

啊哈,好的,這就是爲什麼。謝謝 –