使用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返回的是两条记录。这里是有问题的。暂时无解。
时间: 2024-10-11 05:47:55