Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ElasticSearch 6.x 学习笔记:30.Java API之全文查询

ElasticSearch 6.x 学习笔记:30.Java API之全文查询

作者头像
程裕强
发布于 2022-05-06 11:22:35
发布于 2022-05-06 11:22:35
34700
代码可运行
举报
运行总次数:0
代码可运行

1、全文查询概述

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-full-text-queries.html

The high-level full text queries are usually used for running full text queries on full text fields like the body of an email. They understand how the field being queried is analyzed and will apply each field’s analyzer (or search_analyzer) to the query string before executing.

1.1 match query

The standard query for performing full text queries, including fuzzy matching and phrase or proximity queries.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryBuilder query=QueryBuilders.matchQuery(
        "name",                                              
        "kimchy elasticsearch"); 

1.2 multi_match query

The multi-field version of the match query.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryBuilder query=QueryBuilders.multiMatchQuery(
        "kimchy elasticsearch",                              
        "user", "message");

1.3 common_terms query

A more specialized query which gives more preference to uncommon words.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryBuilder query=QueryBuilders.commonTermsQuery("name", "kimchy");  

1.4 query_string query

Supports the compact Lucene query string syntax, allowing you to specify AND|OR|NOT conditions and multi-field search within a single query string. For expert users only.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryBuilder query=QueryBuilders.queryStringQuery("+kimchy -elasticsearch");

1.5 simple_query_string

A simpler, more robust version of the query_string syntax suitable for exposing directly to users.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryBuilder query=QueryBuilders.simpleQueryStringQuery("+kimchy -elasticsearch");

2、实例演示

2.1 公用查询类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.hadron.es;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

import java.util.Map;

public class QueryUtil {
    private String index="index";
    private int size=3;
    private SearchHits hits;
    private TransportClient client = ESUtil.getClient();

    public QueryUtil(String index,int size){
        this.index=index;
        this.size=size;
    }

    public QueryUtil query(QueryBuilder query){
        //搜索结果存入SearchResponse
        SearchResponse response=client.prepareSearch(index)
                .setQuery(query) //设置查询器
                .setSize(size)      //一次查询文档数
                .get();
        this.hits=response.getHits();
        return this;
    }

    public void print(){
        if(hits==null){
            return ;
        }
        for(SearchHit hit:hits){
            System.out.println("source:"+hit.getSourceAsString());
            System.out.println("index:"+hit.getIndex());
            System.out.println("type:"+hit.getType());
            System.out.println("id:"+hit.getId());
            //遍历文档的每个字段
            Map<String,Object> map=hit.getSourceAsMap();
            for(String key:map.keySet()){
                System.out.println(key+"="+map.get(key));
            }
        }
    }
}

2.2 查询实例

(1)matchQuery

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.hadron.es;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
public class FullTextQuery {
    public static void main(String[] args) {
        QueryUtil util=new QueryUtil("website",5);
        //构造查询对象
        QueryBuilder qb=QueryBuilders.matchQuery(
                "title",
                "centos");
        util.query(qb).print();
    }
}

(2)Operator

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
        QueryUtil util=new QueryUtil("website",5);
        //构造查询对象
        //QueryBuilder qb=QueryBuilders.matchQuery("title", "centos");
        QueryBuilder qb=QueryBuilders
                .matchQuery("title", "centos升级")
                .operator(Operator.AND);
        util.query(qb).print();
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source:{ "title": "CentOS升级gcc","author":"程裕强","postdate":"2016-12-25","abstract":"CentOS升级gcc","url":"http://url.cn/53868915"}
index:website
type:blog
id:3
author=程裕强
postdate=2016-12-25
abstract=CentOS升级gcc
title=CentOS升级gcc
url=http://url.cn/53868915

(3)multiMatchQuery

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static void main(String[] args) {
        QueryUtil util=new QueryUtil("website",5);
        QueryBuilder qb=QueryBuilders.multiMatchQuery("centos","title","abstract");
        util.query(qb).print();
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source:{ "title": "CentOS更换国内yum源","author":"程裕强","postdate":"2016-12-30","abstract":"CentOS更换国内yum源","url":"http://url.cn/53946911"}
index:website
type:blog
id:6
author=程裕强
postdate=2016-12-30
abstract=CentOS更换国内yum源
title=CentOS更换国内yum源
url=http://url.cn/53946911
source:{ "title": "搭建Ember开发环境","author":"程裕强","postdate":"2016-12-30","abstract":"CentOS下搭建Ember开发环境","url":"http://url.cn/53947507"}
index:website
type:blog
id:7
author=程裕强
postdate=2016-12-30
abstract=CentOS下搭建Ember开发环境
title=搭建Ember开发环境
url=http://url.cn/53947507
source:{ "title": "CentOS升级gcc","author":"程裕强","postdate":"2016-12-25","abstract":"CentOS升级gcc","url":"http://url.cn/53868915"}
index:website
type:blog
id:3
author=程裕强
postdate=2016-12-25
abstract=CentOS升级gcc
title=CentOS升级gcc
url=http://url.cn/53868915
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ElasticSearch 6.x 学习笔记:20.搜索排序
20.1 按照文档添加顺序排序 GET website/_search GET website/_search { "query": { "match_all": {} } } 20.2 按照文档相关度评分排序 GET website/_search { "query": { "term": { "title": { "value": "centos" } } } } 查询结果 { "took": 3, "timed_
程裕强
2022/05/06
2340
ElasticSearch 6.x 学习笔记:31.Java API之词项查询
https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-term-level-queries.html
程裕强
2022/05/06
2290
【愚公系列】2023年11月 Java教学课程 212-ElasticSearch(批量操作和查询详解)
ElasticSearch的操作指令和描述来源于官方文档和社区中使用广泛的ElasticSearch操作手册。下面这些操作指令是ElasticSearch的基本操作,可以帮助用户进行数据的增删改查等常见操作,以及索引、映射和集群管理等高级操作。
愚公搬代码
2025/06/02
330
【愚公系列】2023年11月 Java教学课程 212-ElasticSearch(批量操作和查询详解)
ElasticSearch 6.x 学习笔记:15.检索入门
15.1 准备数据 [es@node1 ~]$ vi website.json [es@node1 ~]$ cat website.json { "index":{ "_index": "website", "_type": "blog", "_id": "1" }} { "title": "Ambari源码编译","author":"程裕强","postdate":"2016-12-21","abstract":"CentOS7.x下的Ambari2.4源码编译","url":"http://url.
程裕强
2022/05/06
2020
ElasticSearch 6.x 学习笔记:16.全文检索
ElasticSearch 6.x 全文检索相关内容官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/6.1/full-text-queries.html
程裕强
2022/05/06
3720
ElasticSearch 6.x 学习笔记:19.搜索高亮
参照官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-request-highlighting.html
程裕强
2022/05/06
5200
ElasticSearch 6.x 学习笔记:17.词项查询
词项查询官网: https://www.elastic.co/guide/en/elasticsearch/reference/6.1/term-level-queries.html
程裕强
2022/05/06
1.3K0
ElasticSearch 6.x 学习笔记:29.Java API之Match All Query
https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-query-dsl.html Elasticsearch provides a full Java query dsl in a similar manner to the REST Query DSL. The factory for query builders is QueryBuilders. Once your query is ready, you can use the Search API. Elasticsearch以类似于REST Query DSL的方式提供完整的Java查询dsl。 查询构建器的工厂是QueryBuilders。 一旦您的查询准备就绪,您可以使用搜索API。
程裕强
2022/05/06
5550
ElasticSearch 6.x 学习笔记:28.Java API之文档批量操作
https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-docs-multi-get.html
程裕强
2022/05/06
4540
ElasticSearch 6.x 学习笔记:28.Java API之文档批量操作
ElasticSearch 6.x 学习笔记:34.Java API之桶聚合
https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/_bucket_aggregations.html
程裕强
2022/05/06
2690
ElasticSearch 6.x 学习笔记:22.桶聚合
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket.html 在页面右下角可以看到各类具体的Bucket聚合连接
程裕强
2022/05/06
9150
ElasticSearch 6.x 学习笔记:22.桶聚合
ES实战系列01:基于SpringBoot和RestHighLevelClient 快速搭建博客搜索系统
通过4个博客检索场景,巩固之前所学的全文搜索 Full Text Queries 和 基于词项的 Term lever Queries,同时通过组合查询的Bool query 完成复杂检索,并应用相关度知识对相关性评分进行控制。
方才编程_公众号同名
2020/11/13
1.6K0
ES实战系列01:基于SpringBoot和RestHighLevelClient 快速搭建博客搜索系统
Elasticsearch6.6.x 版本的学习(二)springboot项目整合高级客户端elasticsearch-rest-high-level-client
首先存入一条数据 i like eating and kuing 默认分词器应该将内容分为 “i” “like” “eating” “and” “kuing”
一写代码就开心
2021/09/26
2.8K0
Elasticsearch6.6.x 版本的学习(二)springboot项目整合高级客户端elasticsearch-rest-high-level-client
ElasticSearch 6.x 学习笔记:32.Java API之复合查询
https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-compound-queries.html
程裕强
2022/05/06
3770
Elasticsearch JavaApi
 官网JavaApi地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html
用户1518699
2018/09/12
1.7K0
Spring全家桶之SpringData——SpringDataElasticSearch
使用 Spring Data 下二级子项目 Spring Data Elasticsearch 进行操作。 支持 POJO 方 法操作 Elasticsearch。相比 Elasticsearch 提供的 API 更加简单更加方便。
时间静止不是简史
2021/03/04
1.7K0
elasticsearch2.2之javaApi
前言:elasticsearch虽然自带rest接口,但是在真正使用过程中可能更多的是通过不同编程语言的客户端进行交互。
王念博客
2019/07/24
6110
ElasticSearch的基本操作
Easticsearch 的官方地址:https://www.elastic.co/cn/
shaoshaossm
2022/12/27
7820
ElasticSearch的基本操作
ElasticSearch高级操作
term查询,查询text类型字段时,只有其中的单词相匹配都会查到,text字段会对数据进行分词
小炜同学
2022/09/23
7920
Elasticsearch Java API 索引的增删改查(二)
Index API 允许我们存储一个JSON格式的文档,使数据可以被搜索。文档通过index、type、id唯一确定。我们可以自己提供一个id,或者也使用Index API 为我们自动生成一个。
全科
2018/08/15
4.1K0
推荐阅读
相关推荐
ElasticSearch 6.x 学习笔记:20.搜索排序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验