所有查询
GET /item/_search
{
"query": {
"match_all": {}
}
}
匹配查询(match)
match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系
or关系
GET /item/_search
{
"query": {
"match": {
"title": "SpringData Es2"
}
}
}
and关系
GET /item/_search
{
"query": {
"match": {
"title": {
"query": "SpringData Es2",
"operator": "and"
}
}
}
}
查询出来的信息
{
"took": 0,//毫秒
"timed_out": false,//是否超时
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {//跟查询有关的信息
"total": 1,//条数
"max_score": 2.2548006,//文档得分
"hits": [//满足条件的列表
{
"_index": "item",//索引
"_type": "item",//文档类型
"_id": "2",//id
"_score": 2.2548006,//单条得分
"_source": {//源数据
"id": 2,
"title": "SpringData Es2",
"content": "今天我们使用SpringData ES完成Job搜索功能2"
}
}
]
}
}
or和and之间关系
在or与and间二选一有点过于非黑即白。如果用户给定的条件分词有5个查询词项,想查找包含其中4个次的文档,改如何处理?将operator操作符设置成and只会将文档排除。
match查询支持minimum_should_match最小匹配参数,这让我们可以指定必须匹配的词项数用来表示一个文档是否相关。我们可以将其设置为某个具体数字,
GET /item/_search
{
"query": {
"match": {
"title": {
"query": "SpringData Es2",
"minimum_should_match": "50%"
}
}
}
}
搜索语句可以分为2个次,如果使用and关系 ,需要同时满足2个词才会被搜索到。这里我们采用最小匹配数50%,那么也就是说只要匹配到总次数量的50%计科,这里2*50%等于1。所以只要包含1个词条就算满足了。
多字段查询(multi_match)
multi_match与match类似,不同的是它可以在多个字段中查询
GET /item/_search
{
"query": {
"multi_match": {
"query": "搜索功能99",
"fields": ["title","content"]
}
}
}
多词条精确匹配(terms)
terms查询和term查询一样,但它允许你指定多值进行匹配。如果这个字段包含了知道你个值中的任何一个值,那么这个文档满足条件:
GET /item/_search
{
"query": {
"terms": {
"content": [
"ES",
"搜索功能"
]
}
}
}
网友评论