我的用户个人资料中包含以下字段:
每个用户都应该能够根据某些过滤器(用户名,性别,年龄,语言)搜索其他用户,最终结果应根据偏好(首选语言,首选年龄)按分数排序
考虑这个例子:
用户个人资料:
Randomdude想要对我们的ElasticSearch文档进行研究,他会设置这些过滤器:
所以最终的名单应该只包含西班牙语女性,但它应该更喜欢语言领域有英语或意大利语的人,年龄在20到30岁之间,不排除其他人。所以他仍然可以看到那些用西班牙语说话的人有40个,但几乎就在名单的末尾。
我正在使用Elasticsearch的php包装器。我尝试使用了很多函数,我认为我应该使用函数得分查询,但我无法使其工作,因为文档对我来说非常混乱。
答案 0 :(得分:0)
我将理解ES:D我用这样的bool查询解决了这个问题,但我不确定这是最好的解决方案
{
"query" : {
"bool" : {
"must" :[
{"term" : { "gender" : "female" } },
{"term" : { "nationality" : "spanish" } },
],
"should" :[
{"match" : { "language" : { "query" : "english italian","operator" : "or" } } },
]
}
}
}