弹性搜索上自定义标记生成器的正则表达式

时间:2017-08-30 08:07:05

标签: java regex elasticsearch

我正在尝试为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正则表达式是什么?

问题是否来自其他地方?

1 个答案:

答案 0 :(得分:1)

使用空格标记器类型:

"tokenizer": {
    "tweeter_tokenizer": {
      "type": "whitespace"
    }
  }