匹配查询路径中的Elasticsearch通配符

时间:2017-03-15 17:21:17

标签: java elasticsearch

我希望在java中为Elsaticsearch 5.2构建一个查询过滤器,以匹配作者提供或系统生成的任何关键字。我正在尝试做一个外卡路径,但它不会返回任何结果。我在Elasticsearch中使用标准动态映射。

{
    "content": {
        "title": "The History of Cats",
        "description": "A brief history of cats.",
        "keywords": {
            "author": ["cat"],
            "system": ["felis", "animalia"]
        }
    }
}

理想情况下,如果用户使用关键字catfelis进行搜索,则会对此记录进行搜索。目前,我没有收到任何点击。这可以通过此查询构建器或其他构建器实现吗?我需要调整映射吗?

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;

由于 德鲁

1 个答案:

答案 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;