我正在尝试为elasticsearch创建自定义tokeniser来解析推文:
假设我有这样的文字:
"This is a test!! @test_twitter #testForLife"
我想生成以下标记:
["This", "is", "a", "test!!", "@test_twitter", "#testForLife"]
为此,我提出了我在regex101上测试的以下正则表达式:
(\w*\S*[\S*])
它似乎运作良好。
问题是我的分析器需要一个Java正则表达式,所以我使用regex101转换它,我得到了以下内容:
(\\w*\\S*[\\S*])
我在以下网站http://www.regexplanet.com/advanced/java/index.html上进行了测试,但似乎没有任何内容,我在弹性搜索上尝试过:
PUT my_index
{ "settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
},
"analysis": {
"analyzer": {
"tweeter_analyser_nlp" :{
"type" : "custom",
"tokenizer" : "tweeter_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"tweeter_tokenizer": {
"type": "pattern",
"pattern": "(\\w*\\S*[\\S*])"
}
}
}
},
"mappings": {
"tweet": {
"properties": {
"text": {
"type": "text",
"term_vector": "yes",
"analyzer" : "tweeter_analyser_nlp"
},
"fullname": {
"type": "text",
"term_vector": "with_positions_offsets_payloads",
"analyzer" : "tweeter_analyser_nlp"
}
}
}
}
}
它也没有抓到任何东西:
GET my_index/_analyze
{
"analyzer": "tweeter_analyser_nlp",
"text": "A test"
}
它让我回复:
{
"tokens": [
{
"token": " ",
"start_offset": 1,
"end_offset": 2,
"type": "word",
"position": 0
}
]
}
我的Java正则表达式是错误的,如果是好的Java正则表达式是什么?
问题是否来自其他地方?
答案 0 :(得分:1)
使用空格标记器类型:
"tokenizer": {
"tweeter_tokenizer": {
"type": "whitespace"
}
}