Elasticsearch查询语句,远比你想象的多

本文详细介绍了Elasticsearch的查询语句,包括全文本查询、字段级查询和其他复合查询,如term、terms、范围查询、bool查询、多重查询及异步查询,帮助读者深入理解ES的搜索功能。
摘要由CSDN通过智能技术生成
  • 前言

之前谈过Elasticsearch的介绍,还有服务端和客户端的使用,这一篇该到重点了---查询语句。正所谓--无搜索,无Elasticsearch,至少,我是这么认为的。那么,ES的搜索语句有哪些呢?其实,它们比你想象中的多!

一.全文本查询

1) 例如:查询全部数据,按number顺序排序,并从第11条开始,取10条GET /demo/_search

{
    "query":{
        "match_all":{

        }
    },
    "sort":[
        {
            "number":"asc"
        }
    ],
    "from":10,
    "size":10
}

2)单字段查询,例子:查询query_field里含有value全部或部分字符串的数据

{
    "query":{
        "match":{
            "query_field":"value"
        }
    }
}

3)单字段查询,例子:完全匹配value值

{
    "query":{
        "match_phrase":{
            "query_field":"value"
        }
    }
}

4)多字段模糊匹配查询,例:在country和name两个字段里模糊匹配value值

{
    "query":{
        "multi_match":{
            "query":"value",
            "fields":[
                "country",
                "name"
            ]
        }
    }
}

5)语法查询,例:

{
    "query":{
        "query_string":{
            "query":"(China AND Edwin) OR 18"
        }
    }
}

可以指定字段:

{
    "query":{
        "query_string":{
            "query":"Chine OR Edwin",
            "fields":[
                "country",
                "name"
            ]
        }
    }
}

二。字段级查询

1)字段查询,例:查询age字段为18的数据 (term是完全匹配检索, 要用在不分词的字段上, 如果某个field在映射中被分词了, term检索将不起作用.

所以, 不分词的field, 要在mapping中设置为‘不分词’.)

{
    "query":{
        "term":{
            "age":18
        }
    }
}

2) terms 检索,terms,相当于多个term检索, 类似于SQL中in关键字的用法, 即在某些给定的数据中检索,例:

{
    "query":{
        "terms":{
            "keyword":[
                "Java编程思想",
                "Java并发编程的艺术"
            ]
        }
    }
}

3)范围查询,例:查age字段大于等于18,小于30的数据

{
    "query":{
        "range":{
            "age":{
                "gte":18,
                "lt":30
            }
        }
    }
}

三。其他复合查询

1)主要是bool查询,条件有should、must、must_not等,可以组合filter

例子1:name字段模糊匹配test,或country字段模糊匹配China,并筛选出age字段大于18 的数据

{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                        "name":"test"
                    }
                },
                {
                    "match":{
                        "country":"China"
                    }
                }
            ],
            "filter":[
                {
                    "range":{
                        "age":{
                            "gt":18
                        }
                    }
                }
            ]
        }
    }
}

例子2:在所有数据里(一般默认最多出来10000条,可配置),查询余额大于2万小于3万的数据

{
    "query":{
        "bool":{
            "must":{
                "match_all":{

                }
            },
            "filter":{
                "range":{
                    "balance":{
                        "gte":20000,
                        "lte":30000
                    }
                }
            }
        }
    }
}

例子3. boost评分权重 - 控制文档的优先级别

通过boost参数, 令满足某个条件的文档的得分更高, 从而使得其排名更靠前.

{
    "query": {
        "bool": {
            "must": [
                { "match": { "name": "编程秘籍"} }
            ], 
            "should": [
                { 
                   "match": { 
                        "name": {
                            "query": "艺术", 
                            "boost": 2        // 提升评分权重
                        } 
                    }
                }
            ]
        }
    }
}

2)多重查询,例:

POST /_msearch

{"index":"my_test1"}
{"query":{"match_all":{}}}
{"index":"my_test2"}
{"query":{"match":{"name":"张三"}}}

3)异步查询,例:

POST /demo_index/_async_search?size=0

{
    "sort":[
        {
            "date":{
                "order":"asc"
            }
        }
    ],
    "aggs":{
        "sale_date":{
            "date_histogram":{
                "field":"date",
                "calendar_interval":"1d"
            }
        }
    }
}

至此,关于ES的搜索语句就介绍到这里了,下回该讲讲别的了吧~

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值