简体   繁体   English

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

[英]Elastic Search query string exclude field from search scoring

I am trying to exclude a certain field from being scored in when using Elastic Search, using the Java API. 我试图使用Java API在使用Elastic Search时排除某些字段,使其无法计入分数。

For example, two documents: 例如,两个文档:

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

Currently, I am constructing the query like this: 当前,我正在构建这样的查询:

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

Where query is some ElasticSearch query string. 其中query是一些ElasticSearch查询字符串。 Needless to say, I do not want exclude_this to affect search results. 不用说,我不希望exclude_this影响搜索结果。 However, if for example String query = "filler" , then I don't want the object 1 showing up - in that case, I want nothing to match. 但是,例如,如果String query = "filler" ,那么我不希望显示对象1-在这种情况下,我什么也不想匹配。 I tried to use the fields method, which was recommended in the documentation as the way to accomplish this: 我尝试使用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);

However after doing this, on everything except wildcard searches, I get no results from searches; 但是,这样做之后,在通配符搜索之外的所有内容上,搜索都没有结果。 even when String query = "foo" , then I will get nothing, as if every field is being excluded. 即使当String query = "foo" ,也不会得到任何结果,就像每个字段都被排除在外一样。

Any help? 有什么帮助吗?

To my opinion if I understand correct what you want, this is something you could use: 我认为,如果我理解正确的要求,可以使用以下方法:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM