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();

你可能感兴趣的:(编程)