ElasticSearch使用boost匹配嵌套文档

时间:2013-03-24 09:43:02

标签: ruby-on-rails elasticsearch tire

我有一个用户模型,用户可以拥有多个兴趣点,其数字程度与此人对此主题的兴趣程度有关。示例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的新手,所以任何帮助都非常感谢。

0 个答案:

没有答案