match query会对查询语句进行分词,分词后查询语句中的任何一个词项被匹配,文档都会被搜索到。如果想查询匹配所有关键词的文档,可以用and操作符连接。
分词之后匹配的任意一个都可以。因为是or
curl node2:9200/books/_search?pretty -d '{
"query":{
"match":{
"title":{
"query":"java编程思想",
"operator":"or"
}
}
}
}'
and操作符
curl node2:9200/books/_search?pretty -d '{
"query":{
"match":{
"title":{
"query":"java编程思想",
"operator":"and"
}
}
}
}'
match_phrase查询会把query内容分词,分词器可以自定义,同时文档要满足以下两个条件才会被搜索到:
java编程思想 title
java 编程 思想 编程思想 java编程
curl -XPUT node2:9200/test/test/1?pretty -d '{
"foo":"I just said hello world"
}'
curl -XPUT node2:9200/test/test/2?pretty -d '{
"foo":"Hello world"
}'
curl -XPUT node2:9200/test/test/3?pretty -d '{
"foo":"World Hello"
}'
curl node2:9200/test/_search?pretty -d '{
"query":{
"match_phrase":{
"foo":"hello world"
}
}
}'
match_phrase_prefix和match_phrase类似,不过match_phrase_prefix支持最后一个term前缀匹配:
curl node2:9200/test/_search?pretty -d '{
"query":{
"match_phrase_prefix":{
"foo":"hello w"
}
}
}'
multi_match是match的升级,用于搜索多个字段。查询语句为"java编程",查询域为title和description,查询语句如下:
curl node2:9200/books/_search?pretty -d'{
"query":{
"multi_match":{
"query":"java编程",
"fields":[ "title", "description" ]
}
}
}'
multi_match支持对要搜索的字段名称使用通配符。
curl node2:9200/_search?pretty -d '{
"query":{
"multi_match":{
"query":"java编程",
"fields":["title", "*_name"] user_name pro_name dev_name
}
}
}'
也可以使用指数符指定搜索字段的权重。指定关键词出现在title中的权重是出现在description字段中的3倍。
curl node2:9200/_search?pretty -d '{
"query":{
"multi_match":{
"query":"java编程",
"fields":["title^3", "description"]
}
}
}'
bool查询可以把任意多个简单查询组合在一起,使用must、should、must_not、filter选项来表示简单查询之间的逻辑,每个选项都可以出现0次到多次,含义如下:
假设要查询title中包含关键字java,并且price不能高于70,description可以包含也可以不包含”虚拟机”的书籍,构造bool查询语句如下:
curl node2:9200/books/_search?pretty -d '{
"query":{
"bool":{
"must":{
"match":{"title": "java"}
},
"should":[
{"match":{"description":"虚拟机"}}
],
"must_not":{
"range":{"price":{"gte":70}}
}
}
}
}'
curl node2:9200/books/_search?pretty -d '{
"query":{
"match":{"title":"javascript"}
},
"highlight":{
"fields":{
"title":{
"pre_tags":[""],
"post_tags":[""]
}
}
}
}'
curl node2:9200/books/_search?pretty -d '{
"query":{
"match":{"title":"javascript"}
},
"highlight":{
"fields":{
"title":{
"pre_tags":[""],
"post_tags":[""]
}
}
}
}'