1

我的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分数添加折扣,但对于每个用户,这个折扣是不同的!简单地说,通过从分数中删除位置和评级,它只会是折扣,并且上述示例的结果User1必须User2是:
User1 1-Biz2 7% 2-Biz1 5%

User2 1-Biz1 15% 2-Biz2 5%

有什么解决我的问题的方法SolrElasticsearch

4

1 回答 1

1

您在这里有两个问题:

  1. 用户对哪些业务有哪些计划?
  2. 如何使用正确的商业计划对文档进行排序。

第一个问题可以通过查询数据库得到你的业务=>计划查询来解决。第二个可以通过 ElasticSearch 的函数分数来解决。

您可以提升具有其中一项计划的业务文件。

{
  "query": {
    "function_score": {
      "query": {},
      "functions": [
        {
          "filter": {
            "bool": {
              "should": [
                {
                  "exists": {
                    "field": "plan0"
                  }
                }
              ]
            }
          },
          "weight":5
        },
        {
          "filter": {
            "bool": {
              "should": [
                {
                  "exists": {
                    "field": "plan1"
                  }
                }
              ]
            }
          },
          "weight":10
        }
      ]
    }
  }
}
于 2018-02-25T19:42:52.657 回答