2015-06-08 31 views
1

我在其中具有日期類型的特性的指數型。我需要在我的query_string中搜索這個日期。日期類型的屬性總是

所以這是該類型的映射。

....... 
    ....... 

    "created": { 
     "type": "date", 
     "format": "yyyy-MM-dd'"'T'"'HH:mm:ss.SSSZ" 
    }, 

    ....... 
    ....... 

並且查詢

   "query_string": { 
        "fields": [...... "created", .....], 
        "query": query 
       } 

現在假設查詢有沒有日期,用戶搜索任何東西。它仍然試圖用日期類型解析每個字符串並給出錯誤。 我試圖讓像ISO日期或日期正常,但每次它給錯誤,它不能解析的查詢。

我搜索 「找到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的字段中輸入字段,然後一切正常。 我現在應該做些什麼來解決這個問題? 我沒有找到任何計算器相關的問題和Elasticsearch權威指南。請幫幫我。

回答

0

"query_string"設置"lenient": true忽略這些轉換例外:

  "query_string": { 
       "fields": [...... "created", .....], 
       "query": query, 
       "lenient": true 
      } 

報價從the documentation

寬鬆

如果設置爲true,將會導致基於格式故障(如提供文本到數字字段)被忽略。

與精確日期搜索相關,query_string:作爲特殊字符處理,因此需要進行轉義。看看here閱讀更多有關這一點:

如果您需要使用其中任何一個作爲你的查詢本身(而不是運營商),運營商的角色,那麼你應該與一家領先的反斜槓轉義。例如,要搜索(1 + 1)= 2,您需要將查詢寫爲(1 + 1)\ = 2。

保留的字符是:+ - = & & || > <! (){} [] ^「〜*?:\/

+0

它會在情況下解決當用戶將不會按日期搜索,但按日期搜索,則不會給予任何的結果是沒可能 –

+0

這又是一個。?問題。也許你正在尋找一些不匹配的東西,或者你認爲它應該匹配。 –

+0

不,我給了一個有一些記錄返回的日期,但沒有給任何東西,我已經通過給ISO日期正常日期一切搜索。在這種情況下,解析失敗再次顯示 –