3

私には 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が初めてなので、どんな助けも本当に感謝しています。

4

0 に答える 0