私には User モデルがあり、ユーザーは、この人物が主題にどの程度興味を持っているかを示す数値で、複数の興味を持つことができます。サンプル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
、私がもっと調べるべきものですか?
クエリをタイヤに書くことができなかったので、生の 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が初めてなので、どんな助けも本当に感謝しています。