2016-08-18 110 views
1

我想問一下是否存在一些描述如何使用Elasticseach模式正則表達式的文檔。Elasticsearch模式正則表達式開頭

我需要編寫模式捕獲令牌篩選器哪些過濾器只能使用特定的詞開始。例如輸入令牌流應該是這樣的(「abcefgh」, 「ABC123」, 「爲aabbcc」, 「ABC」, 「abdef」)和我的標記生成器將只返回托克斯(Tokes)abcefghABC123ABC因爲這些令牌以「abc」開頭。

有人可以幫助我如何實現這種用例嗎?

感謝。

+0

正則表達式很簡單 - 'abc。*'。 –

回答

1

我建議是這樣的:

"analysis": { 
    "analyzer": { 
    "my_trim_keyword_analyzer": { 
     "type": "custom", 
     "tokenizer": "keyword", 
     "filter": [ 
     "lowercase", 
     "trim", 
     "generate_tokens", 
     "eliminate_tokens", 
     "remove_empty" 
     ] 
    } 
    }, 
    "filter": { 
    "eliminate_tokens": { 
     "pattern": "^(?!abc)\\w+$", 
     "type": "pattern_replace", 
     "replacement": "" 
    }, 
    "generate_tokens": { 
     "type": "pattern_capture", 
     "preserve_original": 1, 
     "patterns": [ 
     "(([a-z]+)(\\d*))" 
     ] 
    }, 
    "remove_empty": { 
     "type": "stop", 
     "stopwords": [""] 
    } 
    } 
} 

如果您的令牌是pattern_capture過濾的結果,你需要這個過濾器在我的例子中,一個叫eliminate_tokens基本上相匹配的令牌,唐後添加不要從abc開始。那些不匹配的將被空字符串替換("replacement": "")。

之後,要刪除空令牌,我添加了remove_empty過濾器,它基本上是一個stop過濾器,其中停用詞是""(空字符串)。

+0

謝謝你的回答。我嘗試了這個和它的工作!我可以再問一個問題嗎?如果我想讓單詞以「abc」或「bca」或「gdfh」開頭,怎麼辦? – user1827257

+0

你改變''reject_tokens'過濾器的正則表達式:'^(?!(abc | bca | gdfh))\\ w + $' –

+0

謝謝,太簡單了!真的有用! – user1827257