弹性搜索文档提升(如Solr elevateIds)

时间:2014-06-27 17:06:22

标签: elasticsearch

由于其amazon REST API和适用于群集,因此希望从Solr迁移到Elastic Search。然而,我正在努力寻找一种方法来提高查询时特定文档,如Solrs提升方法。有没有办法做到这一点,如果有的话,任何例子都会有用:)

1 个答案:

答案 0 :(得分:2)

我假设您正在引用Solr QueryElevationComponent。 https://wiki.apache.org/solr/QueryElevationComponent

之前有关于如何在Elasticsearch中模拟此功能的讨论。 https://github.com/elasticsearch/elasticsearch/issues/1066

我们的想法是使用Elasticsearch常量得分查询为匹配文档应用持续提升。应用足够大的提升,您实际上可以获得Solr's Elevate的“赞助搜索”结果。

来自文档:

  

常量得分查询

     

包装过滤器或其他查询的查询,只返回一个   常数得分等于对每个文档的查询提升   过滤。映射到Lucene ConstantScoreQuery。

{
    "constant_score" : {
        "filter" : {
            "term" : { "user" : "kimchy"}
        },
        "boost" : 1.2
    }
}
     

过滤器对象只能包含过滤器元素,而不能包含查询。过滤器   可以比查询快得多,因为它们不执行任何查询   得分,特别是当它们被缓存时。

     

查询也可以包含在constant_score查询中:

{
    "constant_score" : {
        "query" : {
            "term" : { "user" : "kimchy"}
        },
        "boost" : 1.2
    }
}

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-constant-score-query.html

修改

使用多个提升的示例:

{
    "query": {
        "bool": {
            "should": [{
                "constant_score": {
                    "filter": {
                        "terms": {
                            "user": ["kimchy", "john"]
                        }
                    },
                    boost: 3
                }
            }, {
                "constant_score": {
                    "filter": {
                        "terms": {
                            "user": ["paul", "ringo"]
                        }
                    },
                    boost: 2
                }
            }]
        }
    }
}