Elasticsearch热门关键词

时间:2013-04-18 22:26:52

标签: elasticsearch

elasticsearch是否提供了跟踪热门关键字的方法?例如,在给定的时间段内,我想知道在查询中最常出现的关键字。

如果elasticsearch没有这样的功能,那么使用elasticsearch实现它的好方法是什么?

谢谢!

4 个答案:

答案 0 :(得分:12)

我认为没有一种内置的方式,但通过terms facet

来实现它应该很容易

您需要做的是:

  1. 将所有查询关键字与弹性搜索索引中的时间戳保存在一起
  2. 按照您感兴趣的时间间隔运行一个match_all查询,并在其上应用术语构面
  3. 不幸的是我没有时间给你写一个例子,但这应该会引导你找到解决方案。

    以下是一个例子:

    // Demo index
    curl -XDELETE 'http://localhost:9200/queries/'
    curl -XPUT 'http://localhost:9200/queries/'
    
    // Add some data
    curl -XPUT 'http://localhost:9200/queries/query/1' -d '
    { 
        "date": "2013-02-19T12:57:23", 
        "query": "Trying out ElasticSearch, so far so good?"
    }'
    
    curl -XPUT 'http://localhost:9200/queries/query/2' -d '
    { 
        "date": "2013-03-02T11:27:23", 
        "query": "Lets give ElasticSearch another try"
    }'
    
    curl -XPUT 'http://localhost:9200/queries/query/3' -d '
    { 
        "date": "2013-04-02T08:27:23", 
        "query": "OK, why dont we stick to SOLR?"
    }'
    
    curl -XPUT 'http://localhost:9200/queries/query/4' -d '
    { 
        "date": "2013-04-19T11:27:23", 
        "query": "Couse ElasticSearch is so much cooler, its bonsai cool"
    }'
    
    // Query it
    curl -XGET 'http://localhost:9200/queries/query/_search?pretty=true' -d '
    {
        "query" : {
            "filtered" : {
                "filter" : {
                    "range" : {
                        "date" : {
                            "gte" : "2013-01-01T00:00:00",
                            "lt" : "2013-04-01T00:00:00"
                        }
                    }
                },
                "query" : {
                    "match_all" : {}
                }
            }
        },
        "facets": {
            "keywords": {
                "terms": {
                    "field": "query"
                }
            }
        }
    }
    '
    

    调整查询中的日期范围以查看输出的更改

答案 1 :(得分:2)

已批准的答案不再有效,因为Facet已被删除并替换为terms aggregation

答案 2 :(得分:1)

ES没有内置功能,但有一个免费的搜索分析服务由Sematext运行(免责声明:我在那里工作)您可以使用它 - 请参阅http://sematext.com/search-analytics/index.html

答案 3 :(得分:0)

由于elasticsearch没有这种内置功能,因此您可以使用Google analyitc之类的免费服务,并将其与将与Elasticsearch进行通信的包装器服务进行集成。