商品搜索结果

时间:2019-01-29 14:27:54

标签: elasticsearch elasticsearch-painless

我正在使用Elasticsearch为产品目录提供搜索功能。 要求能够手动销售给定搜索词的结果集。

例如,自然搜索结果可能会给出结果(1),(2),(3),(4),(5),(6),而商品化结果可能更适合作为(6), (4),(5),(1),(2),(3)

我们目前在排序时使用“ bestsellerRank”字段,该字段的值是在填充弹性搜索索引之前在业务逻辑中计算的,因此,我们可能有多个文档具有相同的bestsellerRank值。

我尝试将下面的脚本添加到查询中,该脚本最初是我发现的here

下面的示例将为匹配iD“ 1364352860”的文档提供6的排序值,同时为不匹配的文档提供与该文档的畅销书排名相匹配的排序值。

"sort": [{
    "_script": {
        "type": "number",
        "script": {
            "lang": "painless",
            "source": "if(params.scores.containsKey(doc['iD'].value)) { return params.scores[doc['iD'].value];} return doc['bestsellerRank'].value;",
            "params": {
                "scores": {
                    "1364352860": 6
                }
            }
        },
        "order": "asc"
    }
}]

此脚本原则上有效,直到没有排序顺序为1-5的文档,或者直到有超过1个排序顺序为5等的文档为止。顺序6不再位于位置6,但是它应该确实出现在位置6,即使其上方的5个文档的排序顺序都从6开始。

SwifType是在Elasticsearch的基础上构建的,最近被他们收购,它具有“结果排名”功能,该功能本质上允许您将特定结果固定在特定位置,因此,此功能必须是可通过Elasticsearch的脚本引擎使用的功能。但是,我在任何地方都找不到这种功能的参考。

有人有尝试将弹性搜索结果固定或固定到指定位置的经验吗?

0 个答案:

没有答案