【问题标题】:spring-data-elasticsearch with const_score带有 const_score 的 spring-data-elasticsearch
【发布时间】:2015-06-10 22:25:37
【问题描述】:

我需要运行以下查询:

GET seg/seg/_search
{
    "query": {
        "constant_score": {
            "filter": {
                "exists": {
                    "field": "iseg"
                }
            },
                "boost": 1.2
        }
    }
}

但我无法使用 spring-data-elasticsearch 轻松运行它。

  1. 有没有办法做到这一点?
  2. spring-data-elasticsearch是否支持所有的elasticsearch查询DSL?

【问题讨论】:

    标签: elasticsearch spring-data-elasticsearch


    【解决方案1】:

    1) 是的

    使用模板:

        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(constantScoreQuery(existsFilter("iseg")).boost(1.2f))
                .withIndices("seg")
                .withTypes("seg")
                .build();
        // when
        Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForList(searchQuery, SampleEntity.class);
    

    TemplateTest Class复制和修改的代码

    使用存储库:

       SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(constantScoreQuery(existsFilter("iseg")).boost(1.2f))
                .withIndices("seg")
                .withTypes("seg")
                .build();
        // when
        Page<SampleEntity> page = repository.search(query);
    

    RepositoryTest Class复制和修改的代码

    2) 是 Spring Data Elasticsearch 使用 QueryBuilder 接口来处理 elasticsearch 部分的所有 Query DSL 请求。

    【讨论】:

    • 感谢您的回复和好消息。我很奇怪为什么我在 repo [spring-data-elasticsear] (github.com/spring-projects/spring-data-elasticsearch) 中找不到“constantScoreQuery”。其实我在spring-data-elasticsearch源码目录下运行“grep -r constant *”。
    • 是的,我会添加测试用例来解决这个问题。谢谢
    • 但是当你使用 findByParameter1AndParameterTwo 时如何设置这个常数分数呢?查询进入查询上下文而不是过滤上下文,并且似乎仍在计算分数
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 2014-09-22
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多