[ElasticSearch]ハングル検索を自動的に完了
39265 ワード
リファレンスリンク
Elasticsearch自動完了の実装
SuggestAPIの概要
Korean Jaso Analyzer
SuggestAPI
suggestAPIは、ユーザが入力したキーワードが正しくない場合や検索結果がない場合に、ドキュメントに存在する単語に対して類似のキーワードを変更できる校正機能を提供する.
エラー照合法
ユーザーが入力を完了する前に、自動完了予測を使用して検索結果を表示し、
データの準備
curl -XPUT 'http://localhost:9200/auto_complete?include_type_name=true&pretty' -H 'Content-Type: application/json' -d '{
"mappings": {
"_doc": {
"properties": {
"search_string": {
"type": "completion"
}
}
}
}
}'
マッピングにより、自動的に完了することを推奨するフィールドを「type」:「completion」と指定します.「完了」を使用して自動的に完了
先頭の文字が一致するデータを返します.
ただし、中間マッチングの検索語は含まれません.
curl -XGET 'localhost:9200/auto_complete/_search?pretty' -H 'Content-Type: application/json' -d'{
"suggest": {
"search-string-suggest": {
"prefix": "빨",
"completion": {
"field": "search_string"
}
}
}
}'
「prefix」で、一番前に一致する文字を指定します.nGram Tokenizer
min_gram
:トークンの最小長、デフォルト=1max_gram
:トークンの最大長、デフォルト=2token_chars
:指定された値に基づいて、対応するフォーマットがタグとみなされます.[アルファベット:a b等アルファベット文字
数字:0 1 2位
スペース:スペースと接尾辞
punctuation : !靴屋
シンボル:特殊文字]
min_gram
およびmax_gram
で決定されると、その範囲内のすべてのトークンが生成される.たとえば、最大長を3、最小長を1と指定したら、helloworldと入力します.
h,e,l,o,w,r,l,d,he,hel, ... このようにして値をインデックスします.
nGramを使用すると、重要なフィールドを2~3文字で検索できますが、検索語の数が増えるにつれてメモリ使用量やシステム負荷も増加します.
データの準備
curl -XPUT 'http://localhost:9200/auto_complete?include_type_name=true&pretty' -H 'Content-Type: application/json' -d '{
"settings" : {
"index":{
"max_ngram_diff": 50,
"analysis":{
"analyzer":{
"my_ngram_analyzer": { //분석기 customize
"tokenizer": "my_ngram_tokenizer"
}
},
"tokenizer": { //ngram 토크나이저 customize
"my_ngram_tokenizer": {
"type": "ngram",
"min_gram": "1",
"max_gram": "10"
}
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"search_string": {
"type": "text",
"fields": { //다중필드
"ngram": { //ngram 옵션이면
"type": "text",
"analyzer": "my_ngram_analyzer" //커스텀한 ngram 토크나이저 분석기로 분석해서 검색하기
}
}
}
}
}
}
}'
検索
今は必ずしも先頭の文字でなくても、内容の「歯」のデータは検索できます!Tokenizerで一つの字を割ってしまったからです.
curl -XGET http://localhost:9200/auto_complete/_search?pretty -H 'Content-Type: application/json' -d '{
"query": {
"match": {
"search_string.ngram": "빨"
}
}
}'
Korean Jaso Analyzer
https://github.com/netcrazy/elasticsearch-jaso-analyzer
ハングル文字単位で自動的に完了します.
検索可能ワード単位(ex.->洗濯室)
ElasticSearch 7.16.2版を入手
cd C:\Users\OCS\Desktop\개발\elasticsearch-7.17.2-windows-x86_64\elasticsearch-7.17.2\bin
C:\Users\OCS\Desktop\개발\elasticsearch-7.17.2-windows-x86_64\elasticsearch-7.17.2\bin>sudo elasticsearch-plugin install https://github.com/netcrazy/elasticsearch-jaso-analyzer/releases/download/v7.16.2/jaso-analyzer-plugin-7.16.2-plugin.zip
"warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME"
-> Installing https://github.com/netcrazy/elasticsearch-jaso-analyzer/releases/download/v7.16.2/jaso-analyzer-plugin-7.16.2-plugin.zip
-> Downloading https://github.com/netcrazy/elasticsearch-jaso-analyzer/releases/download/v7.16.2/jaso-analyzer-plugin-7.16.2-plugin.zip
[=================================================] 100%??
-> Failed installing https://github.com/netcrazy/elasticsearch-jaso-analyzer/releases/download/v7.16.2/jaso-analyzer-plugin-7.16.2-plugin.zip
-> Rolling back https://github.com/netcrazy/elasticsearch-jaso-analyzer/releases/download/v7.16.2/jaso-analyzer-plugin-7.16.2-plugin.zip
-> Rolled back https://github.com/netcrazy/elasticsearch-jaso-analyzer/releases/download/v7.16.2/jaso-analyzer-plugin-7.16.2-plugin.zip
Exception in thread "main" java.lang.IllegalArgumentException: Plugin [jaso-analyzer] was built for Elasticsearch version 7.16.2 but version 7.17.2 is running
at org.elasticsearch.plugins.PluginsService.verifyCompatibility(PluginsService.java:391)
at org.elasticsearch.plugins.cli.InstallPluginAction.loadPluginInfo(InstallPluginAction.java:831)
at org.elasticsearch.plugins.cli.InstallPluginAction.installPlugin(InstallPluginAction.java:887)
at org.elasticsearch.plugins.cli.InstallPluginAction.execute(InstallPluginAction.java:245)
at org.elasticsearch.plugins.cli.InstallPluginCommand.execute(InstallPluginCommand.java:88)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:95)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
at org.elasticsearch.cli.Command.main(Command.java:77)
at org.elasticsearch.plugins.cli.PluginCli.main(PluginCli.java:36)
無視しようとしたが、次のエラーが発生しました.😅もう一度Elastic Searchバージョンを受け入れ、、(ローカルにElastic Search zipファイルがどれだけ代替されているか)
設定
bin/elasticsearch-plugin install https://github.com/netcrazy/elasticsearch-jaso-analyzer/releases/download/v7.16.2/jaso-analyzer-plugin-7.16.2-plugin.zip
設定と索引の作成
curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/jaso/ -d '{
"settings": {
"index": {
"analysis": {
"filter": {
"suggest_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 50
}
},
"tokenizer": {
"jaso_search_tokenizer": {
"type": "jaso_tokenizer",
"mistype": true,
"chosung": false
},
"jaso_index_tokenizer": {
"type": "jaso_tokenizer",
"mistype": true,
"chosung": true
}
},
"analyzer": {
"suggest_search_analyzer": {
"type": "custom",
"tokenizer": "jaso_search_tokenizer"
},
"suggest_index_analyzer": {
"type": "custom",
"tokenizer": "jaso_index_tokenizer",
"filter": [
"suggest_filter"
]
}
}
}
}
}
}'
インデックスマッピング
curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/jaso/_mapping/test -d '{
"properties": {
"name": {
"type": "text",
"store": true,
"analyzer": "suggest_index_analyzer",
"search_analyzer": "suggest_search_analyzer"
}
}
}'
"type": "illegal_argument_exception",
"reason": "Types cannot be provided in get mapping requests, unless include_type_name is set to true."
マッピングでフィールドタイプを設定する場合、include_type_name
パラメータ(パラメータ)をtrueと呼びます.あなたの言うとおりにして、よく写りました!
ドキュメントの生成
curl -XPOST -H 'Content-Type: application/json' http://localhost:9200/jaso/test?pretty=true -d '{
"name":"최일규 Hello"
}'
curl -XPOST -H 'Content-Type: application/json' http://localhost:9200/jaso/test?pretty=true -d '{
"name":"초아"
}'
ドキュメントの検索
curl -XPOST -H 'Content-Type: application/json' http://localhost:9200/jaso/test/_search?pretty=true -d '{
"query" : {
"match" : { "name" : "초" }
}
}'
curl -XPOST -H 'Content-Type: application/json' http://localhost:9200/jaso/test/_search?pretty=true -d '{
"query" : {
"match" : { "name" : "ㅊㅇㄱ" }
}
}'
Reference
この問題について([ElasticSearch]ハングル検索を自動的に完了), 我々は、より多くの情報をここで見つけました https://velog.io/@eeheaven/ElasticSearch-한글-검색-자동완성テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol