替换默认的Elasticsearch分数

时间:2013-11-21 16:46:00

标签: php elasticsearch

我的用户个人资料中包含以下字段:

  • 用户名
  • 性别
  • 国籍
  • 年龄
  • 语言
  • 首选语言
  • 首选年龄

每个用户都应该能够根据某些过滤器(用户名,性别,年龄,语言)搜索其他用户,最终结果应根据偏好(首选语言,首选年龄)按分数排序

考虑这个例子:

用户个人资料:

  • username ='randomdude'
  • gender ='male'
  • nationality ='italian'
  • age = '21'
  • language ='english,italian,spanish'
  • 首选语言='english,italian'
  • 首选年龄= '20 -30'

Randomdude想要对我们的ElasticSearch文档进行研究,他会设置这些过滤器:

  • gender ='female'
  • nationality ='spanish'

所以最终的名单应该只包含西班牙语女性,但它应该更喜欢语言领域有英语或意大利语的人,年龄在20到30岁之间,不排除其他人。所以他仍然可以看到那些用西班牙语说话的人有40个,但几乎就在名单的末尾。

我正在使用Elasticsearch的php包装器。我尝试使用了很多函数,我认为我应该使用函数得分查询,但我无法使其工作,因为文档对我来说非常混乱。

1 个答案:

答案 0 :(得分:0)

我将理解ES:D我用这样的bool查询解决了这个问题,但我不确定这是最好的解决方案

{
    "query" : {
        "bool" : {
            "must" :[
                {"term" : { "gender" : "female" } },
                {"term" : { "nationality" : "spanish" } },
            ],
            "should" :[
                {"match" : { "language" : { "query" : "english italian","operator" : "or" } } },
            ]
        }
    }
}