搜索分词 ElasticSearch 相关问题,请指教!

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

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貌似写起来略麻烦,有经验的朋友,请指教!

共收到 8 条回复

我喜欢用: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挺好用啊

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