2016-11-21 125 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

啊哈,好的,这就是为什么。谢谢 –