簡體   English   中英

Elastic Search查詢字符串從搜索評分中排除字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM