我在索引中有一个类型具有日期类型的属性。我需要在query_string中搜索这个日期。
所以这是该类型的映射。
.......
.......
"created": {
"type": "date",
"format": "yyyy-MM-dd'"'T'"'HH:mm:ss.SSSZ"
},
.......
.......
查询是
"query_string": {
"fields": [...... "created", .....],
"query": query
}
现在假设查询没有日期,用户搜索了其他任何内容。仍尝试用日期类型解析每个字符串并给出错误。 而且我尝试过提供ISO日期或正常日期之类的查询,但是每次它给出的错误都无法解析。
我搜索了#34;找到abcd"。哪里应该归还一些东西。因为有记录在其他属性中有abcd。但它给出了这个错误
Caused by: org.elasticsearch.ElasticsearchParseException: failed to parse date field [find], tried both date format [yyyy-MM-dd'T'HH:mm:ss.SSSZ], and timestamp number
我已提供ISO日期2015-06-08T06:22:09.540Z并收到此错误
Caused by: org.apache.lucene.queryparser.classic.ParseException: Cannot parse '2015-06-08T06:22:09.540Z': Encountered " ":" ": "" at line 1, column 16.
Was expecting one of:
<EOF>
<AND> ...
<OR> ...
<NOT> ...
"+" ...
"-" ...
<BAREOPER> ...
"(" ...
"*" ...
"^" ...
<QUOTED> ...
<TERM> ...
<FUZZY_SLOP> ...
<PREFIXTERM> ...
<WILDTERM> ...
<REGEXPTERM> ...
"[" ...
"{" ...
<NUMBER> ...
at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:132)
at org.apache.lucene.queryparser.classic.MapperQueryParser.parse(MapperQueryParser.java:887)
at org.elasticsearch.index.query.QueryStringQueryParser.parse(QueryStringQueryParser.java:233)
... 15 more
但是当我没有在query_string的字段中包含Date type字段时,一切都运行得很好。 我现在应该怎么做才能解决这个问题? 我没有在stackoverflow和Elasticsearch The Definitive Guide中找到任何相关的问题。请帮帮我。
答案 0 :(得分:0)
在"lenient": true
中设置"query_string"
以忽略这些转化例外:
"query_string": {
"fields": [...... "created", .....],
"query": query,
"lenient": true
}
宽松
如果设置为true将导致忽略基于格式的失败(如向数字字段提供文本)。
与完全日期搜索相关,query_string
将:
视为特殊字符,需要进行转义。看看here,了解更多相关信息:
如果你需要在查询本身中使用任何作为运算符的字符(而不是运算符),那么你应该使用前导反斜杠来转义它们。例如,要搜索(1 + 1)= 2,您需要将查询编写为(1 + 1)\ = 2.
保留字符为:+ - =&amp;&amp; || &GT; &LT; ! (){} [] ^“〜*?:\ /