搜索引擎 ElasticSearch 相关问题,请指教!

qiao2818 · 2016年07月10日 · 最后由 jun1st 回复于 2016年07月15日 · 8145 次阅读

Rails 的项目里用了 Elasticsearch,现在想要去搜索结果进行按日期的 group,或者按某个字段 group。

这里用 DSL 还是 Tire?

比如:post : comments = 1: n 的关系

根据 keyword 对 comments 搜索,结果中对 comment 的 created_at.strftime('%Y-%m-%d') 进行 group;然后,再根据 comment 的 post_id 进行 group;

我看了下 DSL 貌似写起来略麻烦,有经验的朋友,请指教!

我喜欢用:https://github.com/ankane/searchkick

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "by_created_at": {
      "terms": {
        "field": "created_at",
        "format": "yyyy-MM-dd"
      },
      "aggs": {
        "by_post_id": {
          "top_hits": {
            "sort": [
              {
                "post_id": {
                  "order": "desc"
                }
              }
            ],
            "size": 1
          }
        }
      }
    }
  }
}

#1 楼 @mimosa 看了下介绍,这个 gem 不错的!

但是我用 DSL 解决了,如果数据量比较大的话,用 DSL 还是 searchkick?

definition = Elasticsearch::DSL::Search.search {
      query do
        function_score do
          query do
            filtered do
              query do
                if keyword.present?
                  multi_match do
                    query keyword
                    operator 'or'
                    fields %w[ content ]
                  end
                else
                  match_all
                end
              end

              filter do
                range :created_at do
                  gte start_date
                  lte end_date
                end
              end
            end
          end
        end
      end

      group_types.each do |group_type|
        case group_type
          when 'date_day'
            aggregation :date_day do
              date_histogram do
                field 'created_at'
                interval 'day'
                format 'yyyy-MM-dd'
              end
            end
          when 'site_id'
            aggregation :site_id do
              terms do
                field 'site_id'
                size 10
              end
            end
        end
      end
    }

我个人喜欢拼接 json ,用 ES 测试方便。😛

PS:作者有另一个配合 Searchkick 的 统计界面:https://github.com/ankane/searchjoy Demo:http://searchjoy.herokuapp.com/

#3 楼 @mimosa json 的查询语句,如何在 rails 里面使用?

#4 楼 @qiao2818

ElasticSearch 提供的 Rest API <- (很多轮子可以选择)

curl -XGET 'http://localhost:9200/_search?pretty=true' -d '
{ 
    "query" : { 
        "matchAll" : {} 
    } 
}'

#5 楼 @mimosa 这个 chrome 插件不错的

但是 rails 里面如何使用 json 呢?

tire 这个 gem 好像已经退休了。

官方的 Gem 挺好用啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号