2015-12-02 38 views
0

針對未分析字段的正則表達式查詢的默認行爲是什麼?另外,處理.raw字段時的答案是否相同?Elasticsearch - 針對未分析字段的正則表達式查詢的行爲

在我讀過的所有東西之後,我明白以下幾點。 1. RegExp查詢將適用於已分析和未分析的字段。 2.正則表達式查詢應該在整個短語中工作,而不是僅匹配未分析字段中的單個標記。 雖然這是問題。我實際上無法得到這個工作。我已經在多個領域嘗試過了。

我正在使用的設置是股票麋鹿安裝,我傾銷pfsense和snort日誌到它與基本的分析器。我目前在基巴納4.3和ES 2.1

我做了一個查詢來查看其中一個字段的映射,它表明它是not_analyzed,但正則表達式不適用於整個字段。

"description": { 
    "type": "string", 
    "norms": { 
    "enabled": false 
    }, 
    "fields": { 
    "raw": { 
     "type": "string", 
     "index": "not_analyzed", 
     "ignore_above": 256 
    } 
    } 
} 

我在這裏錯過了什麼?

回答

0
  • 如果一個字段是非分析字段只是一個單一的標記。
  • 至少在我的工作中,處理.raw字段時也是如此。
  • 可以使用常規的腳本:

    匹配=(文件[fields.raw]。價值=〜/ $ {圖案} /);
    如果(matcher.matches()){
    matcher.group(matchname)}

可以在PARAMS通過圖案和matchname。

tried it across multiple fields.是什麼意思?如果你的情況更復雜,也許你可以製作一個原生的java插件。

UPDATE

{ 
    "script_fields" : { 
    "regexp_field" : { 
     "script" : "matcher = (doc[fieldname].value =~ /${pattern}/);if(matcher.matches()) {matcher.group(matchname)}", 
     "params" : { 
     "pattern" : "your pattern", 
     "matchname" : "your match", 
     "fieldname" : "fields.raw" 
     } 
    } 
    } 
} 
+0

如果您使用的代碼,如常規,爲你的正則表達式匹配,那麼你正在使用的特定庫的規則,而不是Lucene的語法。所以爲了澄清,我試圖編寫一個正則表達式查詢,它將完全匹配一個字段。即整個短語而不是該短語中的單個單詞。我的意思是跨多個領域嘗試它,這不僅僅是我遇到麻煩的一個領域。這都是他們。 –

+0

您可以在elasticsearch語法中使用此代碼:請參閱我的更新 – fmyblack

+0

感謝您的建議。看看文檔,看起來你必須啓用腳本才能使其工作。 有沒有其他建議可以在不啓用腳本的情況下運行? –