首页 > 代码库 > 使用query ds进行搜索(search with query dsl)

使用query ds进行搜索(search with query dsl)

使用Query-string这种检索方式是方便于命令行的检索,但是他受到了诸多限制(see Search Lite)。ES还提供了一个丰富的,灵活的搜索方式:Query DSL。Query DSL允许用户构建更复杂而健壮的搜索条件。

DSL(Domain Specific Language)使用JSON作为请求体。使用DSL重新构建上一节的搜索条件如下:

GET /megacorp/employee/_search
{
   
"query":{
       
"match":{
           
"last_name":"smith"
       
}
   
}
}
curl -XGET ‘http://localhost:9200/megacorp/employee/_search?pretty‘ -d ‘{"query" : {"match" : {"last_name" : "smith"}}}‘

这个搜素将会和上一节返回相同的结果(Q1),可以发现这些搜索语句的结构是发生了变化的,这里不再使用query string作为参数了,而是使用JSON请求体作为替代,同时使用match这个关键字进行搜索(match是ES中集中查询方式中的一个)。

Q1:

使用curl -XGET ‘http://localhost:9200/megacorp/employee/_search?pretty‘ -d ‘{"query" : {"match" : {"last_name" : "smith"}}}‘进行查询返回的结果的确是和query string一样,如果是在浏览器中http://localhost:9200/megacorp/employee/_search?pretty&{"query" : {"match" : {"last_name" : "smith"}}}返回的结果就是三条记录,这个是有问题的,如果在HEAD中使用GET返回的是三个记录,使用POST返回的是两条记录。这里是有问题的。暂时无解。