ES查询matchPhrase匹配多个字段
时间: 2023-07-20 19:17:28 浏览: 299
在 Elasticsearch 中,可以使用 multi_match 查询来匹配多个字段,然后再使用 match_phrase 查询来进行精确匹配。
具体的代码可以参考下面这个例子:
```java
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchPhraseQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
TransportClient client = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("search phrase", "field1", "field2", "field3");
MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery("field1", "search phrase");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(multiMatchQueryBuilder);
boolQueryBuilder.should(matchPhraseQueryBuilder);
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("index_name")
.setQuery(boolQueryBuilder)
.setSize(10);
SearchResponse searchResponse = searchRequestBuilder.get();
```
在这个例子中,我们首先创建了一个 MultiMatchQueryBuilder 对象,并通过 addFields 方法来指定要匹配的字段。接着,我们创建了一个 MatchPhraseQueryBuilder 对象,并指定要匹配的字段和精确匹配的搜索词。
然后,我们创建了一个 BoolQueryBuilder 对象,并通过 should 方法来将 multiMatchQueryBuilder 和 matchPhraseQueryBuilder 对象添加到 boolQueryBuilder 中,表示其中一个条件满足即可。
最后,我们将 boolQueryBuilder 对象传入 SearchRequestBuilder 的 setQuery 方法中,完成查询操作。
希望这个例子可以帮助到您。
阅读全文