当前位置: 首页 > 知识库问答 >
问题:

弹性搜索。带破折号字符串的范围查询

淳于慎之
2023-03-14

我使用elasticsearch处理带有日期值的字符串字段的数据,如下所示:

“2016-01-25 18:40:18.933”

我试图使用范围筛选器从日期到日期获取值。例如:

    "query" : {
        "filtered" : {
            "query" : {
                "range" : {
                    "createdDate" : {
                        "gte": "2015-11-01", 
                        "lte": "2016-01-25"
                    }
                }
            }
        }
      }
    }

但是结果不包含“createddate”:“2015-12-14 20:28:23.557”的值

如果使用“gte”:“2015”“gte”:“2014-12-31”,则结果中将包含“createddate”:“2015-12-14”的值。

我的查询有什么问题?

共有1个答案

梁烨烨
2023-03-14

如果希望能够对日期运行range查询,则需要将字段映射为date字段,否则它将无法按预期工作。在您共享的映射中,createddate是一个字符串。您需要擦除索引,并使用createddate字段的正确映射创建一个新索引,如下所示:

curl -XPOST localhost:9200/documents -d '{
   "mappings": {
      "order": {
         "properties": {
             "createdDate": {
                "type": "date"
             }
         }
      }
   }
}' 

然后,您可以重新索引您的数据,您的range查询将按预期工作。

 类似资料:
  • 问题内容: 我正在尝试将范围查询与elasticsearch一起使用 但是弹性返回没有结果。我发现系统存在字符串包含或问题 这是该字段的映射: 问题答案:

  • 实现此功能的推荐方法是什么?注意,我使用的是查询字符串查询。

  • 我刚开始做弹性搜索。我想通过子字符串搜索,它由数字和像“/”和“-”这样的符号组成。例如,我使用默认设置和一个索引字段创建索引: 然后,我将一些数据添加到我的索引中: 不返回命中。如果我移除星形符号,那么作为回应,我会看到两个点击:“1/1-35”和“1/2-25”。如果我尝试用反斜杠(“1\/1*”)转义斜杠符号,结果分别是相同的。 当我的查询中有“-”符号时,那么我必须转义这个Lucene特殊

  • 问题内容: 如何从不带破折号的字符串中创建java.util.UUID? 问题答案: Clojure的带 标签文字是对的传递。并且,将其除以“-”并将其转换为两个值。(UUID的格式已标准化为8-4-4-4-12十六进制数字,但“-”实际上仅用于验证和视觉识别。) 直接的解决方案是重新插入“-”并使用。 如果您想要没有正则表达式的内容,则可以使用和。

  • 因此,默认情况下,field1是通过使用默认分析器进行弹性搜索来分析的。 我在下面搜索短语查询,但它没有返回任何结果。 因此弹性搜索短语查询不适合于OR运算符。知道为什么它不起作用吗?它是弹性搜索的一个限制,因为文本中有特殊的字符连字符(-)?

  • 版本字符串有一个支持java类(版本),它实现了Comparable。 我的分析器是一个分析器包装器,它是一个小写和空格分析器,类似于内置的分析器。我使用经典的查询解析器进行搜索。在确切的条件下搜索工作良好。 我想做的是: 我试图在索引之前将版本字符串转换为int,但查询输入需要以某种方式转换,以便在搜索之前将版本字符串转换为int。 看起来我必须为version字段实现一个自定义分析器,但是我在