[英]Elastic Search query string exclude field from search scoring
我试图使用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"
,也不会得到任何结果,就像每个字段都被排除在外一样。
有什么帮助吗?
我认为,如果我理解正确的要求,可以使用以下方法:
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)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.