2017-09-26 8 views
1

私はElasticSearchにいくつか問題があります。最後の部分文字列をトークンとして取得するには、ElasticSearchアナライザ/トークナイザ/フィルタを設定するにはどうすればよいですか?

構造: '→'で区切られたネストされたキーワード。例:→Animal→Mammal→Dog。ネストされたレベルはいくつでも構いません。

私が必要とするのは、analyzer/tokenizer/filterを設定することです。ES最も深いキーワードでのみ検索してください。 たとえば、→Animal→Mammal→Dogは、犬として、動物として→Animal - →Animal→Mammal - をMammalとして分析する必要があります。

私はPathHierarchyトークナイザーを試しましたが、それは私が必要とするものではありません。 PathHierarchyトークナイザは分割→動物→哺乳動物→犬→動物、→動物→哺乳動物→動物→哺乳動物→犬。

答えて

0

正規表現を使用してトークンを生成するPattern Tokenizerを使用できます。

私はこの正規表現を使用:_analyzeエンドポイントと^(?:.*→)(.+)$

テストそれアウト、そうのように:それは常に価値がある

{ 
    "tokens": [ 
     { 
      "token": "Dog", 
      "start_offset": 15, 
      "end_offset": 18, 
      "type": "word", 
      "position": 0 
     } 
    ] 
} 

POST /_analyze 
{ 
    "tokenizer": { 
     "type": "pattern", 
     "pattern": "^(?:.*→)(.+)$", 
     "group": 1 
    }, 
    "text": "→Animal→Mammal→Dog" 
} 

は、次の結果を生成ひどく書かれた正規表現がパフォーマンスの問題を引き起こす可能性があることを繰り返すので、慎重に進んでください。私はうまくいく正規表現を書いたと信じていますが、私は保証しません。

続行する場合は、インデックス設定でCustom Analyzerを設定し、ドキュメントマッピングにアナライザを使用するフィールドが含まれていることを確認する必要があります。

関連する問題