四十九、Elasticsearch初识搜索引擎-实战篇各种que
2017-07-10 本文已影响169人
编程界的小学生
1、match all
需求:查询全部index的全部type下的全部document
GET /_search
{
"query": {
"match_all": {}
}
}
2、match
需求:查询查询全部index的全部type下的document字段名为title,并且title包含my elasticsearch article的
GET /_search
{
"query": {
"match": {
"title": "my elasticsearch article"
}
}
}
注意:搜索时会进行分词,分成my,elasticsearch,article,只要匹配这三个的都会被查出来。
3、multi match
需求:查看test_index索引下test_type类型的test_field和test_field1两个字段包含test的document
GET /test_index/test_type/_search
{
"query": {
"multi_match": {
"query": "test",
"fields": ["test_field", "test_field1"]
}
}
}
4、range query
需求:查询company下employee的年龄大于等于30并且小于等于35的document
GET /company/employee/_search
{
"query": {
"range": {
"age": {
"gte": 30,
"lte": 35
}
}
}
}
5、term query
term意味着不会分词,精确匹配。
需求:精确查询test_index/test_type/下test_field是test hello的document
GET /test_index/test_type/_search
{
"query": {
"term": {
"test_field": {
"value": "test hello"
}
}
}
}
查不出结果,因为不会分词,我们现有document中没有test_field值为test hello的
6、terms query
精确匹配一组(数组),同样不会进行分词
需求:查询tags数组内容是"search", "full_text", "nosql"的document
GET /_search
{
"query": {
"terms": {
"tags": [
"search",
"full_text",
"nosql"
]
}
}
}
说明
很少使用term和terms,他只是精确匹配,若想精确匹配某个字段,在建立mapping的时候指定not_analyzed就好了,一般常用match和range
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:
qrcode_for_gh_577b64e73701_258.jpg