【问题标题】:Elasticsearch Popular KeywordsElasticsearch 热门关键词
【发布时间】:2019-07-10 23:16:33
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我认为没有内置方法,但通过terms facet 应该很容易实现

    你要做的是:

    1. 在弹性搜索索引中保存所有查询关键字以及时间戳
    2. 运行按您感兴趣的时间间隔过滤的 match_all 查询,并在其上应用术语方面

    很遗憾,我没有时间给你写一个例子,但这应该会引导你找到解决方案。

    这是一个例子:

    // 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"
                }
            }
        }
    }
    '
    

    调整查询中的日期范围以查看输出的变化

    【讨论】:

    • 谢谢,我会调查的。如果以后有时间,请随时写一个例子。
    【解决方案2】:

    已批准的答案不再起作用,因为 Facets 已被删除并替换为 terms aggregation

    【讨论】:

    • 链接失效
    【解决方案3】:

    ES 没有此内置功能,但 Sematext 提供免费的 Search Analytics 服务(免责声明:我在那里工作)您可以使用它 - 请参阅 http://sematext.com/search-analytics/index.html

    【讨论】:

    • 好的,我去看看。谢谢你告诉我。
    【解决方案4】:

    由于elasticsearch没有这样的内置功能,您可以使用google analyitc等免费服务并将与elasticsearch通信的包装服务集成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2017-06-13
      • 2016-05-03
      • 2014-12-14
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多