从别名引用的索引中获取搜索最多的词

问题描述

搜索指向一个别名。 索引过程每 5 分钟创建一个新索引。 然后别名被更新,指向新的索引。 重新创建索引是为了避免在进行更改时逐项更新时可能出现的同步问题。

但是,我需要跟踪搜索词以生成仪表板以列出一段时间内搜索次数最多的词。或者甚至使用 Kibana 来显示/提取它。

*搜索词可以是多个词,例如“白色”、“白色夏夜”等。我们希望对词进行排名,而不是单个词。

我没有使用 Elasticsearch 的经验,我尝试过的搜索也没有带来相关的解决方案。

感谢您的帮助!

{
    "actions" : [
        { "remove" : { "index" : "catalog*","alias" : "catalog-index" } },{ "add"    : { "index" : "catalog1234566","alias" : "catalog-index" } }
    ]
}

映射:

{
   "mappings":{
      "properties":{
         "created_at":{
            "type":"integer"
         },"search_terms_key":{
            "type":"keyword"
         }
      }
   }
}

查询

{
   "query":{
      "match_all":{
         
      }
   },"aggs":{
      "search_terms_key":{
         "terms":{
            "field":"search_terms_key","value_type":"string"
         }
      }
   }
}

解决方法

记录搜索词(或整个查询,如有必要),将其提取到 Elasticsearch 中,然后使用 Kibana 进行分析。索引别名配置不相关。

您应该直接从连接到 Elasticsearch 的任何设备或从它与 Elasticsearch 之间的代理获取日志。

可以让 Elasticsearch 本身来记录查询,但这在性能方面通常是个坏主意。

由于它是您要搜索的整个字词,因此请务必在搜索字词上使用 keyword 映射。

摄取搜索词后,使用 terms 聚合显示最热门的搜索。

[编辑:明确需要记录搜索词,而不是完整的 DSL 查询]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...