通过Solr或Elastics中的动态数据进行评分

时间:2018-02-25 14:40:22

标签: elasticsearch solr-boost

我的Solr中有一份商业文件清单。每个企业都有一个位置,一个评级和多个折扣计划。现在,我使用Solr为每个用户建议最佳评级和最近的业务。它很棒。
我的计划是为搜索查询添加折扣。

每家企业都有4个折扣计划 Biz1 ====> Paln0=0%, Plan1=5%, Plan2=10%, Plan3=15%
Biz2 ====> Plan0=0%, Plan1=2%, Plan2=5%, Plan3=7%
此数据保存在Solr个文档中。

每个用户都有自己的折扣计划 User1 ===> Biz1=Plan1, Biz2=Plan3
User2 ===> Biz1=Plan3, Biz2=Plan2
此数据保存在我的数据库中。

我想为Solr分数添加折扣,但对于每个用户,此折扣都不同!简单地说,通过从分数中删除位置和评分,它只会是折扣,上述User1User2示例的结果必须是:
User1 1-Biz2 7% 2-Biz1 5%

User2 1-Biz1 15% 2-Biz2 5%

我的问题在SolrElasticsearch上有解决方法吗?

1 个答案:

答案 0 :(得分:1)

这里有两个问题:

  1. 用户对哪些商家有哪些计划?
  2. 如何使用正确的商业计划对文档进行排名。
  3. 第一个问题可以通过查询数据库来解决您的业务问题=>计划查询。 第二个可以通过ElasticSearch的功能得分来解决。

    您可以推广具有其中一个计划的业务单据。

    {
      "query": {
        "function_score": {
          "query": {},
          "functions": [
            {
              "filter": {
                "bool": {
                  "should": [
                    {
                      "exists": {
                        "field": "plan0"
                      }
                    }
                  ]
                }
              },
              "weight":5
            },
            {
              "filter": {
                "bool": {
                  "should": [
                    {
                      "exists": {
                        "field": "plan1"
                      }
                    }
                  ]
                }
              },
              "weight":10
            }
          ]
        }
      }
    }