end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

elasticsearch に analysis-kuromoji プラグインを導入し、日本語の全文検索

最近ではsudachiの方が利用されているかもしれませんが、 インターネットで検索した範囲では elasticsearch はkuromojiの情報が多いので、今回は kuromoji

参考url

https://qiita.com/mserizawa/items/8335d39cacb87f12b678

install analysis-kuromoji

$ bin/elasticsearch-plugin install analysis-kuromoji
-> Installing analysis-kuromoji
-> Downloading analysis-kuromoji from elastic
[=================================================] 100%?? 
-> Installed analysis-kuromoji
-> Please restart Elasticsearch to activate any plugins installed

↑インストール後、↓その結果を確認

$ bin/elasticsearch-plugin list
analysis-kuromoji

$ curl --cacert config/certs/http_ca.crt -u elastic \
  https://localhost:9200/_nodes/plugins?pretty
Enter host password for user 'elastic': mNXX=JAaEr+gVO5zDQhB
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
【略】  
      "plugins" : [
        {
          "name" : "analysis-kuromoji",
          "version" : "8.15.2",
          "elasticsearch_version" : "8.15.2",
          "java_version" : "17",
          "description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.",
          "classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin",
          "extended_plugins" : [ ],
          "has_native_controller" : false,
          "licensed" : false,
          "is_official" : true
        }
【略】  
}

一旦、indexを閉じ、kuromoji をデフォルトのトークナイザに設定

$ curl --cacert config/certs/http_ca.crt -u elastic \
  -XPOST http://localhost:9200/test_index/_close
Enter host password for user 'elastic': mNXX=JAaEr+gVO5zDQhB

$ curl --cacert config/certs/http_ca.crt -u elastic \
  -H "Content-Type: application/json" -X PUT \
  "https://localhost:9200/_all/_settings?preserve_existing=true" \
  -d '{"index.analysis.analyzer.default.tokenizer": "kuromoji_tokenizer",
       "index.analysis.analyzer.default.type"     : "custom"}'
Enter host password for user 'elastic': mNXX=JAaEr+gVO5zDQhB

$ curl --cacert config/certs/http_ca.crt -u elastic \
  -XPOST http://localhost:9200/test_index/_open
Enter host password for user 'elastic': mNXX=JAaEr+gVO5zDQhB

日本語データの投入

$ vi wine.json

{ "index" : {} }
{ "name": "カベルネ・ソーヴィニヨン", "description": "カベルネ・ソーヴィニヨン (Cabernet Sauvignon) は、世界的に最も有名な赤ワイン用の代表ワイン用品種の1つである。単に「カベルネ」(Cabernet) とも呼ばれることが多い。フランスではメドック地区に代表されるようにボルドーの最も重要な品種の一つであり、世界各地でも栽培されているが、比較的温暖な気候を好む。ソーヴィニヨン・ブランとカベルネ・フランの自然交配によって誕生したといわれている。 果皮のタンニン分が多く、強い渋味のある濃厚なワインとなる。雑味が多く、比較的長期の熟成を必要とする。強過ぎる渋味を緩和すべく、メルロー等の他の品種との混醸や混和も少なくない。歴史的には「ヴィドゥーレ」「ヴェデーレ」(「硬い」の意)とも呼ばれた。ソーヴィニヨン・ブラン同様メトキシピラジン(Methoxypyrazine)に由来するアロマがある。"}
{ "index" : {} }
{ "name": "メルロー", "description": "メルロー (Merlot) は、赤ワイン用の品種の中では最大の作地面積をもつ。とくにフランスのボルドーや、それを真似た「ボルドー・ブレンド」において非常に重要であり、カベルネ・ソーヴィニヨンとブレンドされることもある。カベルネ・ソーヴィニヨンに比し爽やかで、軽口である。また、ボルドーのサンテミリオン(Saint-Emilion)やポムロール(Pomerol)といった地区では、カベルネ・ソーヴィニヨンよりも多く配合され、とくにポムロール地区の「シャトー・ペトリュス」は、しばしばこの品種単独で造られる。日本でも長野県の塩尻市桔梗ヶ原地区などで栽培されている。土壌の塩分に弱い。"}
{ "index" : {} }
{ "name": "ピノ・ノワール", "description": "ピノ・ノワール (Pinot Noir) は、フランスのブルゴーニュ地方を原産とする世界的な品種で、紫色を帯びた青色の果皮を持つ。冷涼な気候を好み、特に温暖な気候では色やフレーバーが安定しないので栽培は難しい。イタリアでは「ピノ・ネロ」(Pinot Nero)、ドイツでは「シュペートブルグンダー」(Spätburgunder)の名がある。遺伝子的に不安定で変異種が少なくない。この中には、緑みを帯びた黄色の果皮を持つピノ・ブラン(Pinot Blanc)や褐色のピノ・グリ(Pinot Gris)などがあり、時には同じ樹に異なった色の果実がなるともいわれている。フランス以外では最近ニュージーランドでの栽培が盛んで、寒冷地を中心に栽培される。ワインはライトボディで、弱めの渋味、繊細なアロマとフレーバーが特徴である。シャンパンにも欠かせない品種である。"}
{ "index" : {} }
{ "name": "シラー", "description": "シラー(Syrah)は「シラーズ」(Shiraz)とも呼ばれる赤ワイン用の代表的な品種の1つである。シラーズはイランの都市名であるが、フランス・ローヌ地方が起源とされる。ローヌ地方の代表的な品種である他、オーストラリアでは最も重要な品種である。南アフリカ、チリなどでも栽培されている。ワインはフルボディで香味が強く、カベルネ・ソーヴィニヨンに比べタンニンが「新鮮」なのが特徴である。他の品種との混醸や混和も見られる。栽培される気候や風土によって味が異なる。ローヌ渓谷北部のコート・ロティやエルミタージュ、オーストラリア産が有名。果実は熟するとしなびやすい。"}
{ "index" : {} }
{ "name": "サンジョヴェーゼ", "description": "サンジョヴェーゼ (Sangiovese) は、イタリアで最も栽培面積の多い赤ワイン用の品種である。果皮の色の違いを含め数多くの亜種を持つ。中央イタリアのトスカーナ州が主産地で、イタリアで最も有名な一つである「キャンティ(Chianti)をはじめ、「ブルネッロ・ディ・モンタルチーノ」(Brunello di Montalcino) や「ヴィーノ・ノービレ・ディ・モンテプルチアーノ」(Vino Nobile di Montepulciano) 、「モレッリーノ・ディ・スカンサーノ」(Morellino di Scansano)などが生産される。コルシカ島では、「ニエルッキオ」(Nielluccio)として知られる。"}
$ curl --cacert config/certs/http_ca.crt -u elastic \
  -H "Content-Type: application/json" \
  -X POST http://localhost:9200/test_index/_bulk --data-binary @wine.json
Enter host password for user 'elastic': mNXX=JAaEr+gVO5zDQhB

{"errors":false,"took":200,
"items":[
  {"index":{"_index":"test_index","_id":"rb8gdZIBNDBl3Nb_TkmR","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":8,"status":201}},
  {"index":{"_index":"test_index","_id":"rr8gdZIBNDBl3Nb_TkmU","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":8,"status":201}},
  {"index":{"_index":"test_index","_id":"r78gdZIBNDBl3Nb_TkmU","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":3,"_primary_term":8,"status":201}},
  {"index":{"_index":"test_index","_id":"sL8gdZIBNDBl3Nb_TkmU","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":4,"_primary_term":8,"status":201}},
  {"index":{"_index":"test_index","_id":"sb8gdZIBNDBl3Nb_TkmU","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":5,"_primary_term":8,"status":201}} ] }

日本語での検索test

$ curl --cacert config/certs/http_ca.crt -u elastic \
  -H "Content-Type: application/json" \
  http://localhost:9200/test_index/_search -d '{"query":{"match":{"description":"渋め"}}}'
Enter host password for user 'elastic': mNXX=JAaEr+gVO5zDQhB


{"took":162,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":2,"relation":"eq"},"max_score":1.2804732,"hits":[{"_index":"test_index","_id":"rb8gdZIBNDBl3Nb_TkmR","_score":1.2804732,"_ignored":["description.keyword"],"_source":{ "name": "カベルネ・ソーヴィニヨン", "description": "カベルネ・ソーヴィニヨン (Cabernet Sauvignon) は、世界的に最も有名な赤ワイン用の代表ワイン用品種の1つである。単に「カベルネ」(Cabernet) とも呼ばれることが多い。フランスではメドック地区に代表されるようにボルドーの最も重要な品種の一つであり、世界各地でも栽培されているが、比較的温暖な気候を好む。ソーヴィニヨン・ブランとカベルネ・フランの自然交配によって誕生したといわれている。 果皮のタンニン分が多く、強い渋味のある濃厚なワインとなる
。雑味が多く、比較的長期の熟成を必要とする。強過ぎる渋味を緩和すべく、メルロー等の他の品種との混醸や混和も少なくない。歴史的には「ヴィドゥーレ」「ヴェデーレ」(「硬い」の意)とも呼ばれた。ソーヴィニヨン・ブラン同様メトキシピラジン(Methoxypyrazine)に由来するアロマがある。"}},{"_index":"test_index","_id":"r78gdZIBNDBl3Nb_TkmU","_score":0.84890795,"_ignored":["description.keyword"],"_source":{ "name": "ピノ・ノワール", "description": "ピノ・ノワール (Pinot Noir) は、フランスのブルゴーニュ地方を原産とする世界的な品種で、紫色を帯びた青色の果皮を持つ。冷涼な気候を好み、特に温暖な気候では色やフレーバーが安定しないので栽培は難しい。イタリアでは「ピノ・ネロ」(Pinot Nero)、ドイツでは「シュペートブルグンダー」(Spätburgunder)の名がある。遺伝子的に不安定で変異種が少なく
ない。この中には、緑みを帯びた黄色の果皮を持つピノ・ブラン(Pinot Blanc)や褐色のピノ・グリ(Pinot Gris)などがあり、時には同じ樹に異なった色の果実がなるともいわれている。フランス以外では最近ニュ
ージーランドでの栽培が盛んで、寒冷地を中心に栽培される。ワインはライトボディで、弱めの渋味、繊細なアロマとフレーバーが特徴である。シャンパンにも欠かせない品種である。"}}]}}

形態素解析のtest

$ curl --cacert config/certs/http_ca.crt -u elastic \
  -H "Content-Type: application/json" \
  -X POST "http://localhost:9200/test_index/_analyze" -d '{"text":"渋め"}'
Enter host password for user 'elastic': mNXX=JAaEr+gVO5zDQhB


{"tokens":[{"token":"渋","start_offset":0,"end_offset":1,"type":"word","position":0},{"token":"
め","start_offset":1,"end_offset":2,"type":"word","position":1}]}