我有一个用户模型,用户可以拥有多个兴趣点,其数字程度与此人对此主题的兴趣程度有关。示例user.to_indexed_json
是:
{
// user attributes
interests: [
{category_id: 1, degree: 1}
{category_id: 2, degree: 3}
// more category stuff here
}
}
映射是:
tire do
mapping do
indexes :name, type: 'string', analyzer: 'snowball'
indexes :email, type: 'string', analyzer: 'snowball'
indexes :lat_lon, type: 'geo_point'
indexes :interests, type: 'nested', :category_id => :number
end
end
给定多个传入兴趣的数组[{category_id,degree},{category_id,degree}](基本上是另一个用户的兴趣),匹配具有这些相似兴趣的所有用户,并按度数排序(提升)。我尝试了很多不同的查询但无法获得结果。
你知道如何编写轮胎查询吗?是dis_max
还是嵌套查询我应该查看更多内容?
我无法在Tire中写入查询,因此我编写了原始JSON搜索查询。我可以得到一些结果,但它没有做任何提升
{
"query": {
"filtered": {
"query": { "match_all": {} },
"filter": {
"nested": {
"path": "interests",
"query": {
"bool": {
"minimum_number_should_match": 1,
"should": [
{"match": { "interests.category_id": 7}
,{"match": {"interests.category_id": 1}}
,{"match": {"interests.category_id": 10}}
]
}
}
}
}
}
}
}
我是ES的新手,所以任何帮助都非常感谢。