【问题标题】:Elastic Search query string exclude field from search scoring弹性搜索查询字符串从搜索评分中排除字段
【发布时间】:2018-07-17 05:06:08
【问题描述】:

在使用 Elastic Search 时,我试图通过 Java API 排除某个字段的评分。

例如两个文档:

{
   "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",我什么也得不到,好像每个字段都被排除在外。

有什么帮助吗?

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    在我看来,如果我理解正确你想要什么,这是你可以使用的东西:

    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)
                     );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2021-06-28
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多