2017-11-17 2 views
0

私は、データセットから特定のフレーズの同義語を探しています。私は、データが格納されている2つのJSONファイルをyesとnoの同義語で構成しています。私が「興味がない」という質問をすると、結果としてyesとnoのフレーズ/シノニムが得られますが、期待される結果はただのフレーズ/シノニムです。BleveSearchを使用してフレーズ一致を正確に取得するにはどうすればよいですか?

EN-GEN-yes.json

{ 
"tag":"en-gen-yes", 
"phrases": [ 
    "yes", 
    "yeah", 
    "sure", 
    "suits me", 
    "interested" 
] 

}

EN-GEN-no.json

{ 
"tag":"en-gen-no", 
"phrases": [ 
    "no", 
    "nope", 
    "not sure", 
    "does not suits me", 
    "not interested" 
] 

}

クエリコード

結果は

として来る[いいえいや必ず興味を持って私をしませ合っていないではない]

期待される結果のみ

ある[ええはい確か興味が私に合っ] [いいえ、私は興味がないと確信していません]

答えて

0

理由両方が一致すると、使用しているMatchPhraseQueryが検索用語を分析するということです。ここでIndexMappingを表示していないので、わかりませんが、「標準」アナライザーを使用していると仮定します。このアナライザは、英語の単語を停止し削除し、英語のストップワードリストがここで定義されています

https://github.com/blevesearch/bleve/blob/master/analysis/lang/en/stop_words_en.go#L281

だから、これはあなたが「興味がない」ためMatchPhraseQueryを行うときに、あなただけの「興味」を探してしまうことを意味し。そしてその言葉は、あなたの同義語の「はい」リストにも存在します。

正確に一致するPhraseQuery(Matchなし)というバリアントがあることには注意してください。そして、それは検索時に "not"という単語を削除しませんが、それでも一致を見つけることはできません。その理由は、「not」という単語がインデックス時にも削除されているため、「関心がない」との正確な一致は一致するものを見つけられません(はいでもいいもない)。

解決策は、停止語を削除しないか、または単語「not」を含まないカスタム停止語リストを使用するカスタムアナライザを構成することです。これを行い、索引作成と検索の両方に使用すると、使用している照会が正しく機能するはずです。

+0

私は、キーワードや単純なアナライザは、ドキュメントがストップワードの削除をしないと言っていると思っていました。しかし結果は変わらない。 間違っていると思われますか、どちらかのアナライザが動作する必要がありますか? –

関連する問題