2017-10-24 10 views
1

私は、電子商取引の商品名を保持するフィールドnameの次のマッピングを持っています。ハイフンベースの単語をelasticsearchでトークン化できるようにする

'properties': { 
     'name': { 
      'type': 'text', 
      'analyzer': 'standard', 
      'fields': { 
       'english': { 
       'type': 'text', 
       'analyzer': 'english' 
      }, 
     } 
    }, 

次の文字列をインデックス/検索すると仮定します。

3 Tシャツ

のパックanalyerzsの両方は、それぞれの用語[T、シャツ]、[Tシャツ]を生産しています。

これは私のユーザーの種類「メンズTシャツ」

がどのように私は、[T、シャツ、シャツ、Tシャツ」、Tシャツなどの転置インデックスに用語を得ることができたときに任意の結果を得ていないという問題を提供します]

私はStemmersの除外項目を調べようとしましたが、ハイフンを処理することができませんでした。また、除外を手動で行うのではなく、より一般的な解決策が見つかった場合は、私は役に立ちます。私は今知らない多くのpossiblities例えばemails, e-mails

答えて

-1

空白トークナイザが行うことができます

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-tokenizer.html

POST _analyze 
{ 
    "tokenizer": "whitespace", 
    "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." 
} 

ジョブが

[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ] 
+1

を与えるだろう。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 17725026) – mustaccio

+0

気づいていただきありがとうございます。一定。 – pkhlop

+0

こんにちは、これは人々が '' 'tシャツ' 'を検索するとき私を助けることができます。私がもっと探しているのは '' 'tshirts''なので、あなたの例では' [brownfoxes] ' –

0

が生成されますがあるかもしれないので私は1つの解決策を見つけました私は希望の結果を達成するのに役立つと思う。しかし、私はまだこの問題のためのいくつかの良い、推奨されたアプローチがあるかどうかを見たいと思います。

基本的に、最初のアナライザが標準となり、2番目のアナライザが私のカスタムとなるこの問題には、複数フィールドを使用します。

chars_filtersは、tokenizerの前に発生します。だから、-を空の文字で削除し、t-shirtstshirtにすることです。したがって、トークナイザは、用語全体を反転インデックスのtshirtsとしてトークンします。

GET _analyze 
{ 
    "tokenizer": "standard", 
    "filter": [ 
     "lowercase", 
     {"type": "stop", "stopwords": "_english_"} 
    ], 
    "char_filter" : [ 
     "html_strip", 
     {"type": "mapping", "mappings": ["- => "]} 
    ], 
    "text": "these are t-shirts <table>" 
} 

は、このリンクは質問に答えるかもしれないが、ここでは答えの重要な部分が含まれており、参考のためにリンクを提供することをお勧めし、次のトークンに

{ 
    "tokens": [ 
     { 
     "token": "tshirts", 
     "start_offset": 10, 
     "end_offset": 18, 
     "type": "<ALPHANUM>", 
     "position": 2 
     } 
    ] 
} 
関連する問題