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

qiao2818 · July 10, 2016 · Last by jun1st replied at July 15, 2016 · 8138 hits

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 挺好用啊

You need to Sign in before reply, if you don't have an account, please Sign up first.