###前提・実現したいこと
環境:CentOS6.5, Elasticsearch2.4.4
synonymを用いた検索を試みています。
_analyzeにおいてsynonymの動作を確認できたものの、
_searchにおいて、検索結果にsynonymが反映されず、検索score値が上がらないという問題に悩んでいます。
原因がお分かりになる方がいらっしゃいましたらお知恵を拝借させてください。
###動作確認済の範囲
# synonym辞書の中身 hattoriという文字列とyamatoという文字列をsynonymとして指定しています。 % cat /etc/elasticsearch/synonym.txt hattori,yamato # index(syn4)に対するanalyzer設定、サンプルデータ投入、setting確認 % curl -XPUT 'localhost:9200/syn4' -d ' { "settings": { "analysis": { "analyzer": { "synonym" : { "tokenizer" : "whitespace", "filter" : ["synonym"] } }, "filter" : { "synonym" : { "type" : "synonym", "synonyms_path" : "synonym.txt" } } } } } ' #データ投入 % curl -XPUT 'localhost:9200/syn4/blog/1' -d ' { "title": "self introduction", "content": "my name is yamato" } ' #setting確認 % curl -XGET http://localhost:9200/syn4/_settings?pretty { "syn4" : { "settings" : { "index" : { "creation_date" : "1492924084619", "analysis" : { "filter" : { "synonym" : { "type" : "synonym", "synonyms_path" : "synonym.txt" } }, "analyzer" : { "synonym" : { "filter" : [ "synonym" ], "tokenizer" : "whitespace" } } }, "number_of_shards" : "5", "number_of_replicas" : "1", "uuid" : "sPeReqCiTdiQmn9y6egxxx", "version" : { "created" : "2040499" } } } } }
analyzeテスト
yamato,hattoriが両方とも見える
curl -XGET 'http://localhost:9200/syn4/_analyze?analyzer=synonym' -d 'hattori' {"tokens":[{"token":"hattori","start_offset":0,"end_offset":7,"type":"word","position":0},{"token":"yamato","start_offset":0,"end_offset":7,"type":"SYNONYM","position":0}]}
###【問題の生じる箇所】
検索実行したログが以下となります。
hattoriで検索した際、yamatoでの検索よりも検索スコアが著しく低い(0.009585157)です。
また、synonym辞書にない語、例えば"hatta"にした際、わずかにスコアが高くなる(0.01程度)ことを確認しています。
% curl -XGET 'localhost:9200/syn4/_search' -d ' { "query": { "query_string": { "fields": ["content"], "query": "yamato" } } } ' {"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.23218305,"hits":[{"_index":"syn4","_type":"blog","_id":"1","_score":0.23218305,"_source": { "title": "self introduction", "content": "my name is yamato" } }]}} % curl -XGET 'localhost:9200/syn4/_search' -d ' { "query": { "query_string": { "fields": ["content"], "query": "hattori" } } } ' {"took":14,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.009585157,"hits":[{"_index":"syn4","_type":"blog","_id":"1","_score":0.009585157,"_source": { "title": "self introduction", "content": "my name is yamato" } }]}}
試したこと
http://qiita.com/yamadagenki/items/15cd190dc4e0f1b3e3fa
を参考にanalyzerをquery内に指定した場合、元の"yamato"でもヒットできなくなりました。"hattori"も同様です。
% curl -XGET 'localhost:9200/syn4/_search' -d ' { "query": { "query_string": { "fields": ["content"], "query": "yamato", "analyzer": "synonym" } } } ' {"took":3,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/26 02:29
2017/04/26 04:25