elasticsearch - 在时间范围内查找相同的文本

标签 elasticsearch

我以这种格式在ElasticSearch中存储博客文章:

{
  blog_id: keyword,
  blog_article_id: keyword,
  timestamp: date,
  article_text: text
}
假设我想在过去30天内找到所有提及X的文章至少两次的所有博客。是否有一个简单的查询来查找在一个日期范围内至少有n次具有相同单词的文章的所有blog_id?
这是对问题建模的正确方法,还是应该使用嵌套对象来简化查询?
可以在Kibana中将其记录为报告吗?

最佳答案

我想到的最简单的查询是

{
  "_source": "blog_id", 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "article_text": "xyz"
          }
        },
        {
          "range": {
            "timestamp": {
              "gte": "now-30d"
            }
          }
        }
      ]
    }
  }
}
相反,nested对象很可能不会简化任何事情。

Can it be made into a Kibana report?


当然。只需在KQL(基宾查询lang)中使用过滤器,或使用下拉列表并选择要跟踪的指标(总blog_id计数,时间序列频率等)

编辑发生的次数:
我知道两种方式:
  • term_vector API,可为您提供word frequency信息,但它是独立的API,无法在查询时使用。
  • 然后是scripted approach,您可以查看整个文章的文本,将其视为区分大小写的关键字,并计算子字符串的数量,从而消除词频不够的文章。请注意,您不必像我一样使用function_score-一个简单的 script query 就可以了。如果您有不重要的文档数量,则可能要花费很短的时间才能解决。

  • 在您的情况下,它可能看起来像这样:
    {
      "query": {
        "bool": {
          "must": [
            {
              "script": {
                "script": {
                  "source": """
                    def word = 'xyz';
                    def docval = doc['article_text.keyword'].value;
                    String temp = docval.replace(word, "");
                    def no_of_occurences = ((docval.length() - temp.length()) / word.length());
                    return no_of_occurences >= 2;
                  """
                }
              }
            }
          ]
        }
      }
    }
    

    关于elasticsearch - 在时间范围内查找相同的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62863355/

    相关文章:

    elasticsearch - 使用两个不同的磁盘卷来存储elasticsearch

    elasticsearch - 在camelCase中,kibana “Expect plugin ” id错误,但发现:apm_oss

    elasticsearch - logstash索引文本文件

    python - 语义搜索-从一堆文本文件中检索与传入的搜索词组非常匹配的句子

    elasticsearch - 删除包含特定字符串的日志消息

    querydsl - Elasticsearch 多个字段的数组

    elasticsearch - Elasticsearch在数组字段中获取全部符合要求的项目?

    java - Elasticsearch : Can't get Native (Java) Script working

    logging - 如何删除 Logstash 过滤器中所有具有 NULL 值的字段

    java - Elasticsearch java中带有not_analyzed的索引字段