我想在下面的行中搜索“确切的工作区”,现在它返回与工作区匹配的所有记录以及任何其他包含该单词的记录。
例如,如果我搜索“财务”,它也会返回“公司财务”。谁能建议如何使这一行仅返回完全匹配项?
boolQuery.should(QueryBuilders.matchPhraseQuery("audiences.areasOfWork", areaOfWork));
boolQuery.should(QueryBuilders.matchPhraseQuery("audiences.interests", interest));
BoolQueryBuilder filterQuery = boolQuery();
filterQuery.must(QueryBuilders.matchQuery("audiences.grades", grade));
filterQuery.must(QueryBuilders.matchQuery("status", status));
filterQuery.mustNot(QueryBuilders.matchQuery("audiences.type", "Valid"));
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQuery)
.withFilter(filterQuery)
.withSort(SortBuilders.scoreSort().order(SortOrder.DESC))
.withPageable(pageable)
.build();
return operations.queryForPage(searchQuery, Course.class);
最佳答案
而不是在分析的字段中进行搜索,您需要在未分析的字段中进行搜索,该字段已针对精确匹配进行了优化。
您没有共享索引的映射(我也不确定您使用的是哪个客户端),我只是假定了字符串字段的默认映射。
以下更改可能会有所帮助:
请记住,通过上述更改,您需要匹配索引时的确切字符串(大小写相同,间距相同等)。
boolQuery.should(QueryBuilders.matchQuery("audiences.areasOfWork.keyword", areaOfWork));
关于elasticsearch - 用Elasticsearch搜索完全匹配的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60413775/