栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

es 7.x JavaAPI 文档 模糊查询 高亮查询

es 7.x JavaAPI 文档 模糊查询 高亮查询

文章目录

模糊查询高亮查询

模糊查询

主要是使用QueryBuilders.fuzzyQuery("name", "wangwu") 进行模糊查询, 第一参数为要模糊查询的字段, 第二字段为要模糊查询的值.
.fuzziness(Fuzziness.TWO) 用于表示能够进行几个字段的模糊查询.

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;


public class ESTest_Doc_Query {

    public static void main(String[] args) throws Exception {
        RestHighLevelClient esClient = null;
        // 创建ES客户端
        try {
            esClient = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
            SearchRequest request = new SearchRequest();
            request.indices("user");
            // 模糊查询
            SearchSourceBuilder builder = new SearchSourceBuilder();
            builder.query(QueryBuilders.fuzzyQuery("name", "wangwu").fuzziness(Fuzziness.TWO));

            request.source(builder);
            SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
            // 查询命中的信息
            SearchHits hits = response.getHits();

            System.out.println(hits.getTotalHits());
            System.out.println(response.getTook());
            for (SearchHit hit : hits) {
                System.out.println(hit.getSourceAsString());
            }
        } finally {
            if (esClient != null) {
                // 关闭ES客户端
                esClient.close();
            }
        }
    }
}

运行结果如下 :

{“name”:“wangwu”,“age”:40,“sex”:“男”}
{“name”:“wangwu1”,“age”:40,“sex”:“女”}
{“name”:“wangwu2”,“age”:50,“sex”:“男”}
{“name”:“wangwu3”,“age”:50,“sex”:“男”}
{“name”:“wangwu44”,“age”:60,“sex”:“男”}

可以看到查询的结果中, 最多有两个字段模糊匹配.
改如下的代码, 只匹配一个字段模糊查询
builder.query(QueryBuilders.fuzzyQuery("name", "wangwu").fuzziness(Fuzziness.ONE));
查询结果如下 :

{“name”:“wangwu”,“age”:40,“sex”:“男”}
{“name”:“wangwu1”,“age”:40,“sex”:“女”}
{“name”:“wangwu2”,“age”:50,“sex”:“男”}
{“name”:“wangwu3”,“age”:50,“sex”:“男”}

高亮查询

HighlightBuilder 进行高亮查询, 并且可以指定高亮的前后缀标签.
查询结果使用hit.getHighlightFields() 进行查询.

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermsQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;

import java.util.Map;
import java.util.Set;


public class ESTest_Doc_Query {

    public static void main(String[] args) throws Exception {
        RestHighLevelClient esClient = null;
        // 创建ES客户端
        try {
            esClient = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
            SearchRequest request = new SearchRequest();
            request.indices("user");
            SearchSourceBuilder builder = new SearchSourceBuilder();

            // 高亮查询
            TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "zhangsan");
            HighlightBuilder highlightBuilder = new HighlightBuilder();
            highlightBuilder.preTags("");
            highlightBuilder.postTags("");
            highlightBuilder.field("name");

            builder.highlighter(highlightBuilder);
            builder.query(termsQueryBuilder);

            request.source(builder);
            SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
            // 查询命中的信息
            SearchHits hits = response.getHits();

            System.out.println(hits.getTotalHits());
            System.out.println(response.getTook());
            for (SearchHit hit : hits) {
                Map highlightFields = hit.getHighlightFields();
                Set strings = highlightFields.keySet();
                for (String key : strings) {
                    System.out.println("key: " + key + " value: " + highlightFields.get(key));
                }
            }
        } finally {
            if (esClient != null) {
                // 关闭ES客户端
                esClient.close();
            }
        }
    }
}

打印信息如下 :

1 hits
2ms
key: name value: [name], fragments[[zhangsan]]

说明成功进行了命中结果的高亮

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/706558.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号