Elasticsearch普及后备

时间:2015-11-02 23:38:06

标签: elasticsearch lucene

如果没有找到匹配,我的查询中有人气排名。我每周都会根据上个月访问过该文档的次数来计算popRank字段。这意味着并非所有文档都有popRank,只有上个月访问过的文档。

下面的查询不适用于must子句,即使有些项目包含该类别

GET /index/docs/_search
{
    "size": 10,
    "query": {
        "bool": {
            "should": [{
                "terms": {
                    "body": [<array of keyword strings>]
                }
            }, {
                "constant_score": {
                    "filter": {
                        "match_all": {}
                    },
                    "boost": 0
                }
            }],
            "must": [{
                "terms": {
                    "category": ["DIY"],
                    "boost": 0
                }
            }],
            "minimum_should_match": 1
        }
    },
    "sort": [{
        "_score": {
            "order": "desc"
        }
    }, {
        "popRank": {
            "unmapped_type": "double",
            "order": "desc"
        }
    }]
}

如果should子句已满足,则此查询应返回结果文档,否则则流行度排名将接管,在任何一种情况下都必须按类别进行过滤。如果match_all以外的其他内容返回结果,但仅在match_all返回结果时不起作用,则此方法有效。

这是一个示例文档。

{
    "_index": "index",
    "_type": "docs",
    "_id": "Fridays",
    "_score": 1,
    "_source": {
        "id": "Fridays", 
        "body": "text...",  
        "category": [
            "DIY",
            "Kitchen"
        ],      
        "popRank": 1
    }
}

0 个答案:

没有答案