Elasticsearch Java API 实现搜索功能(2) 多字段匹配

前言

参考自:https://blog.csdn.net/zx711166/article/details/77847120
以下内容可以参考:https://blog.csdn.net/Leige_Smart/article/details/80900642
1. client的设置和连接
2. matchPhraseQuery和matchQuery的区别
3. 搜索结果的输出
4. 【XX】代表什么意思

版本信息

Elasticsearch:5.6.9
Java:1.8.0

实现功能

多字段查询
should和must两种模式

should和must的比较

should模式:就算有一个字段没有匹配的也会有结果返回
  must模式:必须要求所有字段都匹配到,只要有一个字段不匹配就没有搜索结果 

用到的类

import java.net.InetAddress;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.elasticsearch.index.query.MatchQueryBuilder;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Scanner;

设计搜索规则

 //这里可以同时使用matchPhraseQuery和matchQuery
 MatchPhraseQueryBuilder mpq1 = QueryBuilders
                .matchPhraseQuery(【tag1】,【key1】);

 MatchQueryBuilder mpq2= QueryBuilders
                .matchQuery(【tag2】,【key2】);

 MatchQueryBuilder mpq3= QueryBuilders
                .matchQuery(【tag3】,【key3】);

 //这里设置三个字段搜索的关系
 QueryBuilder qb2 = QueryBuilders.boolQuery()
                .should(mpq1)
                .must(mpq2)
                .must(mpq3);

//这里设置索引和type以及打分规则
 SearchRequestBuilder searchRequestBuilder = client.prepareSearch(【indices】).setTypes(【type】)
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(qb2);
 SearchResponse response = searchRequestBuilder 
                .setExplain(true).get();
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值