検索を開始するとすぐに、実際にはこれは特定の検索エンジンから完全に独立しており、同じ意味を持つ単語を処理しなければならな
たとえば、ユーザーに場所で検索させると、英国を英国、米国を米国と呼ぶ人もいますが、この状況は場所に限定されず、博士号や博士号とも呼ばれることが
最初のステップとして、あなたは一つの単語の同義語や複数の単語を持つ状況にあるかどうかを判断する必要がありますが、これは間違いなくLuceneベースの検索システムにとって無関係なものではありません。 歴史的にLuceneは非常に悪い複数の単語の同義語を処理してきましたが、基本的には索引作成時間を構築し、その後の問題のリストを作成する必要があ 興味がある場合は、今後の投稿のためにこのシリーズに従ってください。
空腹の技術的な心を持っている場合は、これはあなたのためのいくつかの関連する問題とリンクです:この投稿では、クエリ時にElasticsearchでこれを解決する方法に焦点を当て、フォローアップ投稿ではインデックス作成時間の同義語とその長所と短所を処理し
シノニムは、クエリ/インデックス変換チェーンの一部として、ElasticsearchおよびSolrで処理されます。 Elasticsearchの穴マッピングと解析パーツに精通していない場合は、この部分に重点を置くことになるため、今後はこの部分に追いつくことをお勧めします。
単一の単語、またはトークンベースの同義語の場合、elasticsearchで同義語トークンフィルタを使用します。 最初のステップは、synonym_token_filterで現在の分析チェーンを拡張することです。:

この画像から、synonym型のjobs_synonym_filterという名前の新しいフィルタを定義し、二つのsynonym定義を含むことがわかります。 これは、前の画像の2番目の設定で見ることができるものです。
これからは、以前に定義したアナライザを使用してテキストを処理し、他の入力、インデックス、またはクエリ時間と同様に、Elasticsearchは選択したチェーンを使
Elasticsearchはアナライザの動作を確認するための標準的な方法を提供するため、インデックス作成やクエリ中にcheck themを使用する必要はありません。 アナライザがどのように動作するかを確認する場合は、_analyzeエンドポイントを使用できます。
たとえば、以前に定義されたアナライザの動作をチェックすることを目的とする場合、PhDとCopというもっともらしい単語をいくつか考えてみてくださ:
- PhD John Doe→Doctor John Doe
- Cop John Doe→Police John Doe
次の画像では、Elasticsearch内でこれがどのように実行されるかの例を見て、タイプを含むさまざまなトークンがどのよう トークンの1つがシノニムのテーブルから生成された場合、型はシノニムになります。

しかし、この例では、単一のトークン同義語、PhDマップを持つ問題の1つを見始めることができますが、doctorは必ずしもPhDを意味するだけではなく、medical doctor、またはPhysicianを意味することもできます。
この類義語を同じ構造で処理することを考えるかもしれませんが、分析チェーンは単語ごとに一つのトークンを生成し、前の類義語フィルタのタス 次の画像をチェック,

を使用すると、medical doctorという単語が同義語で正しく処理されていないことがわかります。 このための解決策、複数の単語の同義語フィルタがあります。
マルチワード類義語
Luceneベースの検索エンジンファミリーの下でこのケースを適切に処理するのはちょっと難しいですが、なぜ疑問に思うかもしれませんか? これは、Luceneの一般的な戦略がテキストを単一のトークンに分割するためです。
この状況を解決するためのいくつかの戦略があります。:
- 複数の単語の同義語を正規形に減らす。
- 関連するトークンを結合し、そこから同義語を構築します。
- 新しく作成したシノニムグラフフィルタを使用します。
- …
私たちは、このエントリで最初の二つをカバーしません,それらの詳細については、今後の記事を確認してくださ このエントリでは、トークンだけでなく、単語間の全体的な関係を処理できるLuceneのよりスマートなトークンフィルタであるsynonym graph filterに焦点を当てます。
シノニムグラフフィルタを使用するには、前のセクションで紹介したフィルタと同様の方法で宣言する必要があります。:

この例では、分析チェーンの作成で3つの同義語を直接定義しましたが、構成ファイルを使用して同義語のリストを設定する方がよいでしょう。 同義語は、Solr/LuceneまたはWordNet形式を使用して入力できます。
WordNetのことを聞いたことがない場合は、チェックする価値があります!. WordNetは、英語、名詞、動詞、形容詞、副詞の大規模な語彙データベースは、同義語のセットにグループ化されており、より多くのです。 この種の語彙データベースは、テキストのより豊かな理解を開発しようとしているときに非常に便利です。 GermaNetとドイツ語などの他の言語にも同様の概念があります。
次の画像のカップルでは、この新しい同義語がどのように機能しているかを見ることができました,


では、Elasticsearchが医師などの単一の単語のシノニムをどのように操作するかだけでなく、システムエンジニアをどのように処理するかを理解するのに十分スマートだったかを参照してください。
しかし、スペイン人が”no es oro todo lo que reluce”や英語で言うように、すべてが簡単になるわけではありません。 Elasticsearchで同義語を使用している場合は、query_stringよりもphrase_queryを好む場合は、次の画像でそれらがどのように機能するかを確認できます。


を使用したクエリデバッグquery_stringを使用した最後の画像が、適切な文書を見つけるための適切なクエリ用語を生成しないことがわかります。
要約
このエントリでは、Elasticsearchで同義語を処理する既存の方法を紹介しました。 この記事では、単一の単語/トークンの同義語から始めて、elasticsearchに特化したLuceneベースの検索エンジンで同義語がなぜどのように機能するのかを紹介しました。
将来のエントリは、各ソリューションの長所と短所を要約しますが、マルチワードの同義語を使用する場合は、フレーズクエリの使用に焦点を当て、重要な
記事は、マルチワード類義語とそれらがどのように設定できるかを簡単に提示して終わります。