关于Elasticsearch查询(match、match_phrase、query_string和term)

 由上图看出, QueryBuilder 是整个查询操作的核心,决定了查询什么样的数据和期望得到什么结果这些核心的问题。

QueryBuilder 只是一个接口,需要具体的实体类才可以。那么如何创建 QueryBuilder 的实例呢?有两种方式

  • 通过 QueryBuilder 实现类的构造函数
  • 使用 QueryBuilders 工具类创建

Building Queries

下面就来看下常用的查询及其 API 有哪些

匹配所有的查询

查询语句如下

GET /_search
{
    "query": {
        "match_all": {}
    }
}

对应的 QueryBuilder Class 为 MatchAllQueryBuilder

具体方法为 QueryBuilders.matchAllQuery()

全文查询 Full Text Queries

什么是全文查询?

像使用 match 或者 query_string 这样的高层查询都属于全文查询,

  • 查询 日期(date) 或整数(integer) 字段,会将查询字符串分别作为日期或整数对待。
  • 查询一个( not_analyzed )未分析的精确值字符串字段,会将整个查询字符串作为单个词项对待。
  • 查询一个( analyzed )已分析的全文字段,会先将查询字符串传递到一个合适的分析器,然后生成一个供查询的词项列表

组成了词项列表,后面就会对每个词项逐一执行底层查询,将查询结果合并,并且为每个文档生成最终的相关度评分。

Match

match 查询的单个词的步骤是什么?

  1. 检查字段类型,查看字段是 analyzednot_analyzed
  2. 分析查询字符串,如果只有一个单词项, match 查询在执行时就会是单个底层的 term 查询
  3. 查找匹配的文档,会在倒排索引中查找匹配文档,然后获取一组包含该项的文档
  4. 为每个文档评分

构建 Match 查询

match 查询可以接受 text/numeric/dates 格式的参数,分析,并构建一个查询。

GET /_search
{
    "query": {
        "match" : {
            "message" : "this is a test"
        }
    }
}

上面的实例中 message 是一个字段名。

对应的 QueryBuilder class : MatchQueryBuilder

具体方法 : QueryBuilders.matchQuery()

全文查询 API 列表

全部的 API 列表如下(链接均指向 elasticsearch 官网)

Search Query QueryBuilder Class Method in QueryBuilders
Match MatchQueryBuilder QueryBuilders.matchQuery()
Match Phrase MatchPhraseQueryBuilder QueryBuilders.matchPhraseQuery()
Match Phrase Prefix MatchPhrasePrefixQueryBuilder QueryBuilders.matchPhrasePrefixQuery()
Multi Match MultiMatchQueryBuilder QueryBuilders.multiMatchQuery()
Common Terms CommonTermsQueryBuilder
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值