前言
参考自:https://blog.youkuaiyun.com/zx711166/article/details/77847120
以下内容可以参考:https://blog.youkuaiyun.com/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();