Elasticsearch查询之Match

本文介绍了Elasticsearch中match查询的基本用法,包括全查找、单条数据查询、条件查询、match_phrase关键字查询以及match_phrase_prefix查询。通过具体实例展示了不同查询方式的特点及其应用场景。

学习几天的elasticsearch总结下match匹配以方便温习。

首先我创建了一个index:mytest,type:usertest,并插入了5条数据。

ps:用的sense浏览器插件(如何安装可以百度)

pretty:美化查询结果。

_search:搜索关键字
query: 及表示查询
match: 匹配

一、简单的全查找:

式例:

POST /mytest/usertest/_search?pretty
{
     "query":{
            "match_all": {}
        }

}

mytest:index名称(对应关系数据库名称)
usertest:_type名称(对应关系数据库表名)

查询结果图:

通过hits 内total:5可以看出5条记录都查询出来了 
另外一种简单的写法示例:
POST /mytest/user/_search
推荐用第一种json体的方法,扩展性和灵活性更加多样化。但是简单的查询第一种就可以完成,视情况而定吧。
这个美化查询结果,看了半天觉得没啥变化,注:_source参数不会被美化。

二、查询单条数据
1:POST /mytest/usertest/_search?q=name:xiaofang

2:json体:
POST /mytest/usertest/_search?pretty
{
   "query":{
"match":{
      "name":"xiaofang"
   }
        }

}


简单说明:username:为字段名称和关系数据库字段一个意思。
      按照等分高低排列
笔者在使用java api进行操作时没有用QueryBuilders.matchPhraseQuery方法时返回结果包含“xiao”单词的文档(测试时使用的中文检索)
三、简单的条件查询:

查询usertest中年龄在20周岁以下的人员
   1: POST /mytest/usertest/_search
{   
    "query": {
        "match_all": {}
    },
            "filter":{
                "range": {
                    "userage": {
                      "from": 18,
                      "to": 20
                    }
                }
            }
        
}


查询年龄小于20周岁以下的人员
    2: POST /mytest/usertest/_search
{
    "query": {
        "match_all": {}
    },
            "filter":{
                "range": {
                   "userage": {
                      "lt" : "20"
                    }
                }
            }
      

}

 

我们可以通过查询结果看出两者之间的差别
这两个示例用到了“filter”,“range”这两个关键词。
filter:过滤器。用于过滤我们的查询结果,让查询结果更加精确化。
range:区间。(以上是range的简单的两种写法)
"lt" 转移字符 “小于”的意思。
"gt" :“大于”的意思。


四、match_phrase关键字查询:
match_phrase:短语搜索。
对比示例:
未使用match_phrase查询的代码及结果:


POST /mytest/usertest/_search
{
    "query": {
        "match": {
            "about": "listen music"
        }
    }
}




使用match_phrase查询的代码及结果:
POST /mytest/usertest/_search
{
    "query": {
        "match_phrase": {
            "about": "listen music"
        }
    }

}

match_phrase查询就不多说啦,一看就明白。


五、match_phrase_prefix查询
match_phrase_prefix:匹配短语前缀查询。
上两个示例就一目了然啦:
POST /mytest/usertest/_search
{   "query": { 
        "match_phrase": {
              "about": "love lis"
            }
        
    }    
}




POST /mytest/usertest/_search
{   "query": { 
        "match_phrase_prefix": {
              "about": "love lis"
            }
        
    }    
}




关于match匹配搜索就写到这儿吧。
<think>好的,用户现在想了解Elasticsearchmatch_all查询的使用方法和示例。首先,我需要回忆一下match_all的基本作用,它是用来匹配所有文档的查询,通常用于测试或需要返回全部数据的情况。用户可能是在做数据导出或者测试连接时用到这个查询。 接下来,查看用户提供的引用内容。引用[2]中有一个Java API的示例,使用了QueryBuilders.matchAllQuery(),并展示了如何执行查询和处理结果。引用[3]提到了match_all查询在bool查询中的使用,但用户明确询问的是match_all本身,所以可能需要重点放在基础用法上。 用户之前的问题是关于词组匹配,现在转向match_all,可能是在学习不同的查询类型。需要确保回答结构清晰,分步骤说明,并提供不同场景的示例,比如基础查询、分页、排序以及结合其他查询使用的情况。 还要注意用户提到的系统级指令,比如使用正确的LaTeX格式,但在这个问题中可能涉及较少。需要检查是否有需要强调的技术细节,比如字段类型或性能影响。例如,使用match_all时要注意分页以避免性能问题,这在回答中应该提到。 另外,用户希望生成相关问题,可能需要围绕match_all的应用场景、性能优化、与其他查询的区别来设计问题。比如,match_all在分页中的应用,或者与match查询的区别。 最后,确保回答中的代码示例正确,并参考了用户提供的引用内容,尤其是Java API的部分,以保持一致性。同时,提醒用户在实际使用中谨慎,避免返回过多数据导致性能下降。</think>以下是关于Elasticsearch中`match_all`查询的详细说明及使用示例: --- ### 一、`match_all`查询的核心作用 `match_all`是Elasticsearch中最基础的查询类型,**用于匹配索引中的所有文档**。常用于以下场景: 1. **测试索引数据连通性** 2. **导出全量数据** 3. **与其他查询组合时作为默认匹配条件**[^3] --- ### 二、基础语法实现 #### 1. REST API用法 通过简单的JSON结构匹配全部文档: ```json GET /your_index/_search { "query": { "match_all": {} } } ``` - **示例响应**:返回索引中所有文档的`_source`内容 #### 2. 分页与排序扩展 通过`from/size`实现分页,`sort`添加排序规则: ```json GET /products/_search { "query": { "match_all": {} }, "from": 0, "size": 10, "sort": [ { "price": "desc" } ] } ``` --- ### 三、Java API实现 通过`QueryBuilders`工具类构建查询[^2]: ```java // 创建match_all查询对象 QueryBuilder query = QueryBuilders.matchAllQuery(); // 执行查询(带分页参数) SearchResponse response = client.prepareSearch("your_index") .setQuery(query) .setFrom(0) .setSize(20) .addSort("create_time", SortOrder.DESC) .get(); // 处理结果集 SearchHits hits = response.getHits(); for (SearchHit hit : hits) { System.out.println(hit.getSourceAsString()); } ``` --- ### 四、组合查询场景 #### 1. 与过滤条件结合 在`bool`查询中作为兜底匹配: ```json { "query": { "bool": { "should": [ { "term": { "category": "electronics" } }, { "match_all": {} } ], "minimum_should_match": 1 } } } ``` *说明:当无电子产品时仍返回其他文档* #### 2. 加权评分 通过`boost`参数调整相关性权重: ```json "match_all": { "boost": 0.1 // 降低默认评分 } ``` --- ### 五、注意事项 1. **性能影响** 全量查询会遍历所有分片,建议配合`scroll API`处理大数据量导出[^2] 2. **结果过滤** 可通过`_source`参数限制返回字段: ```json "_source": ["id", "name"] ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值