Elastic Search查询字符串从搜索评分中排除字段

时间:2018-07-17 05:06:08

标签: java elasticsearch

在尝试使用Java API使用Elastic Search时,我试图排除某个字段。

例如,两个文档:

{
   "id": 1,
   "bar": "foo",
   "exclude_this": "filler"
},
{
   "id": 2,
   "bar": "different",
   "exclude_this": "something else"
}

当前,我正在构建如下查询:

    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    boolQueryBuilder.must(QueryBuilders.queryStringQuery(query)
        .defaultOperator(Operator.AND));

query是一些ElasticSearch查询字符串。不用说,我不希望exclude_this影响搜索结果。但是,例如,如果String query = "filler",则我不希望显示对象1-在这种情况下,我什么也不想匹配。我尝试使用fields方法,该方法在文档中建议使用此方法:

Map<String, Float> fieldsToQuery = new HashMap<>();
fieldsToQuery.put("bar", 1f);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.queryStringQuery(query)
    .defaultOperator(Operator.AND))
    .fields(fieldsToQuery);

但是,在执行此操作之后,除了通配符搜索之外,所有其他搜索都没有结果;即使String query = "foo",我也一无所获,好像每个字段都被排除在外。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

我认为,如果我理解正确的要求,可以使用以下方法:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders
                        .multiMatchQuery("search text", "bar", "id")
                        .operator(Operator.AND)
                 );
boolQueryBuilder.mustNot(QueryBuilders
                        .matchQuery("exclude_this", "search text")
                        .operator(Operator.AND)
                 );