2017-03-06 31 views
1

在ElasticSearch存儲的文檔中,字段「kitten」中存儲2種類型的值:包含數字和數字的詞。 例子:ElasticSearch數組中的正則表達式

cat8389 
fox973 
947384 

我想獲得的所有文件,在這個陣列中存儲的最小的一個只有數字值,而不能爲它編寫一個正確的查詢:(

我試試這個,但它的不正確:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "regexp": { 
      "kitten": "[0-9 ]+$" 
      } 
     } 
     ], 
     "must_not": [], 
     "should": [] 
    } 
    }, 
    "from": 0, 
    "size": 10, 
    "sort": [], 
    "aggs": {} 
} 

幫助我,請...

+0

僅供參考:ES模式默認爲錨定,您不必使用/不能使用'$'。模式必須匹配整個輸入。 「最小唯一數字值」是什麼意思?如果您想匹配僅限數字的字段,請使用'「[0-9] +」' –

+0

謝謝。這是正確的查詢:{ 「查詢」:{ 「布爾」:{ 「必須」:[{ 「正則表達式」:{ 「小貓」: 「[0-9] +」 } } ], 「must_not」:[], 「應該」:[] } }, 「從」:0, 「大小」:10, 「排序」:[], 「AGGS」:{ } } –

+0

發表了,請考慮接受/ upvoting。 –

回答

1

ElasticSearch patterns默認情況下錨定,而不能使用字符串結束錨(與字符串^的開始相同)。這也意味着模式必須與整個輸入相匹配。

大多數正則表達式引擎允許您匹配字符串的任何部分。如果您希望正則表達式模式從字符串的開始處開始或在字符串的末尾結束,則必須使用^指定開頭或$來指示結束。

Lucene的模式總是固定的。提供的模式必須匹配整個字符串。

因此,要匹配僅限數字的輸入,請僅使用"[0-9]+"模式。