EDR-00004をトークンに変換できるElasticsearch pattern_captureフィルタを実装しようとしています:[EDR-00004、00004、4]私はまだElasticsearch 2.4で作業していますが、現在のESバージョンのドキュメントとの違いはありません。pattern_captureトークンフィルタの実装に失敗しました
私はドキュメントの例を踏襲しています https://www.elastic.co/guide/en/elasticsearch/reference/2.4/analysis-pattern-capture-tokenfilter.html
これは私のテスト、結果、次のとおりです。
curl -XPUT 'localhost:9200/test_index' -d '{
"settings": {
"analysis": {
"filter": {
"process_number_filter": {
"type": "pattern_capture",
"preserve_original": 1,
"patterns": [
"([A-Za-z]+-([0]+([0-9]+)))"
]
}
},
"analyzer": {
"process_number_analyzer": {
"type": "custom",
"tokenizer": "pattern",
"filter": ["process_number_filter"]
}
}
}
}
}'
curl -XGET 'localhost:9200/test_index/_analyze' -d '
{
"analyzer": "process_number_analyzer",
"text": "EDR-00002"
}'
curl -XGET 'localhost:9200/test_index/_analyze' -d '
{
"analyzer": "standard",
"tokenizer": "standard",
"filter": ["process_number_filter"],
"text": "EDR-00002"
}'
戻り値:
{"acknowledged":true}
{
"tokens": [{
"token": "EDR",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
}, {
"token": "00002",
"start_offset": 4,
"end_offset": 9,
"type": "word",
"position": 1
}]
}
{
"tokens": [{
"token": "edr",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
}, {
"token": "00002",
"start_offset": 4,
"end_offset": 9,
"type": "<NUM>",
"position": 1
}]
}
私は
-
ことを理解0
- 私はpreserve_originalを設定しているので、正規表現全体をグループ化する必要はありません
- 私は\ dと\ wのどちらかに置き換えることができますが、エスケープについて考える必要はありません。
また正規表現が正しいことを確認しました。
>>> m = re.match(r"([A-Za-z]+-([0]+([0-9]+)))", "EDR-00004")
>>> m.groups()
('EDR-00004', '00004', '4')