2016-08-18 112 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