kibana上での扱い

kibanaでは数値型じゃない項目に対して集計をかけることができない。なのでmappingはきちんと定義しておく必要がある。またindex指定時にフィールドメタデータを読み込むので、更新した場合はkibana側でリフレッシュをかける必要がある。

analyzer

tokenizer一覧

standard一文字だけ
edgeNGram
nGram
simpleスペース区切り

NGram Tokenizer

nGram

# test
# default analayzer(2-gram)
index.analysis.analyzer.default.tokenizer: custom_bigram_tokenizer
index.analysis.tokenizer.custom_bigram_tokenizer.type: nGram
index.analysis.tokenizer.custom_bigram_tokenizer.min_gram: 2
index.analysis.tokenizer.custom_bigram_tokenizer.max_gram: 2
index.analysis.tokenizer.custom_bigram_tokenizer.token_chars.0: letter
index.analysis.tokenizer.custom_bigram_tokenizer.token_chars.1: digit
index.analysis.tokenizer.custom_bigram_tokenizer.token_chars.2: symbol

Whitespace Tokenizer

空白区切り

Pattern Tokenizer

Lowercase Tokenizer

Letter Tokenizerの後にLower case Token Filterをかけたものと全く一緒だが、パフォーマンス場はこちらが有利。

Letter Tokenizer

テキストじゃない部分(空白やらピリオドやら)で分割する。ほとんどのヨーロッパ言語ではうまくいくがアジア系の言語だとひどいことになる。

Keyword Tokenizer

keywordが全入力を一つの単位として扱う。

kuromoji日本語の形態素解析

analyzerの挙動確認

 curl 'localhost:9200/test/_analyze?pretty' -d 'こんにちは世界'
curl 'localhost:9200/test/_analyze?pretty=1&analyzer=my_ngram_analyzer' -d 'Database + fulltext=search'

kuromoji徹底調査

日本語アナライザーであるkuromojiの調査結果。実際に試してみるのが一番早い。コアのプラグインには指定されているが、利用にはインストールが必要。

https://github.com/elastic/elasticsearch-analysis-kuromoji/tree/v2.7.0/#version-270-for-elasticsearch-17

構成要素

kuromoji_tokenizer以外はフィルター。ほぼ全てを組み合わせて使うらしい。

kuromoji_tokenizer通常の形態素解析
kuromoji_baseform動詞形容詞の基本形を解析する
kuromoji_part_of_speechpart_of_speechで指定した品詞を除去する
kuromoji_readingform token filter漢字→ひらがなorローマ字

参考サイト

  1. http://christina04.hatenablog.com/entry/2015/02/02/225734
  2. http://createfield.com/Elasticsearch%E3%81%AE%E3%82%A2%E3%83%8A%E3%83%A9%E3%82%A4%E3%82%B6%E3%83%BC%E3%82%92%E8%A9%A6%E3%81%99%E6%96%B9%E6%B3%95

mapping

mappingの基礎

UserAgentなどの用に空白で区切られた文字列をデフォルトで取り込むと解析されてしまい、ブラウザごとのシェアなどが正しく判定できない。全文一致のみ利用するのであればnot_analyzedを指定する。ただしそれだけだと今後は部分一致ができなくなるので部分一致用の設定も入れてあげる必要がある。Multi-Fieldと呼ばれていたが2.0以降ではやり方が違う。

"mappings": {
   "company": {
     "_source": {
       "enabled": true
     },
     "_all": {
       "enabled": true,
       "analyzer": "kuromoji_analyzer"
     },
     "properties": {
       "id": {
         "type": "integer",
         "index": "not_analyzed"
       },
       "name": {
         "type": "string",
         "index": "analyzed",
         "analyzer": "ngram_analyzer"
       },
       "location": {
         "type": "string",
         "index": "analyzed",
         "analyzer": "kuromoji_analyzer"
       }
     }
   },
   "project": {
     "_source": {
       "enabled": true
     },
     "_all": {
       "enabled": true,
       "analyzer": "kuromoji_analyzer"
     },
     "_parent": {
       "type": "company"
     },
     "properties": {
       "id": {
         "type": "integer",
         "index": "not_analyzed"
       },
       "title": {
         "type": "string",
         "index": "analyzed",
         "analyzer": "kuromoji_analyzer"
       }
     }
   }
 }

参考サイト

  1. http://engineer.wantedly.com/2014/02/25/elasticsearch-at-wantedly-1.html
  2. http://christina04.hatenablog.com/entry/2015/02/02/225734
  3. https://medium.com/hello-elasticsearch/elasticsearch-833a0704e44b#.b5xjzm5a3
Counter: 2636, today: 2, yesterday: 1

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-14 (金) 13:16:53