我希望在java中为Elsaticsearch 5.2构建一个查询过滤器,以匹配作者提供或系统生成的任何关键字。我正在尝试做一个外卡路径,但它不会返回任何结果。我在Elasticsearch中使用标准动态映射。
{
"content": {
"title": "The History of Cats",
"description": "A brief history of cats.",
"keywords": {
"author": ["cat"],
"system": ["felis", "animalia"]
}
}
}
理想情况下,如果用户使用关键字cat
或felis
进行搜索,则会对此记录进行搜索。目前,我没有收到任何点击。这可以通过此查询构建器或其他构建器实现吗?我需要调整映射吗?
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.filter(QueryBuilders.matchQuery("content.keywords.*", keyword));
SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("my-index")
.setTypes("article")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(queryBuilder)
.setFrom(0)
.setSize(10)
.addSort(SortBuilders.scoreSort());
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
return searchResponse;
由于 德鲁
答案 0 :(得分:0)
经过一番挖掘后,可以通过将匹配查询更改为多匹配查询来实现此目的
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.filter(QueryBuilders.multiMatchQuery(keyword, "content.keywords.*"));
SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("my-index")
.setTypes("article")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(queryBuilder)
.setFrom(0)
.setSize(10)
.addSort(SortBuilders.scoreSort());
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
return searchResponse;