実践!Elasticsearch をやっていた時の勉強メモが残っていたので公開しておきます。
基礎
Indexフェーズ
ドキュメントの解析
Full Text -> Termsにする作業。
日本語だと形態素解析に当たる重要な部分。
解析の流れ:
CharFilters(複数) -> Tokenizer(1つ) -> TokenFilter(複数)
TokenFilterではストップワードを除いたりもできる
ドキュメントの追加削除、取得など
Index Module
Searchフェーズ
フィルター
検索をYes/Noの2値や日付やGeoLocation、キーワードの一致などExact Machの検索を行うときは以下のQueryではなくFilterを使う。
また、Queryと異なりキャッシュすることができる。
クエリ
全文検索を行い、適合度によりランク付けしたいときには上のFilterではなくQueryを使う。
検索関連機能
- uri search
- GETで簡単に検索する
- request body search
- POSTで色々設定して検索できる
- facets
- 検索を元に統計的な分析ができる
- suggesters
- Suggest機能。使うにはPhrase Suggesterサーバーを用意する。
- 入力補助用としてPrefixを元にするCompletion Suggester
- multi search api
- 複数クエリを同時に投げられる
- count api
- 検索結果の数を返してくれる
- validate api
- 検索結果を返さずに、その検索をしてエラーが出ないかどうかだけを返してくれる
- explain api
- デバッグ用にスコアリングの説明を出してくれる
- percolate api
- よくわからん。TwitterのTimeLine検索みたいなのを作りたいときに使える??
- more like this api
ElasticSearchのスコアリング
INDEX時
Mappingの_boostフィールド
この方法では、Index時に、あるフィールドやドキュメントのスコアをブーストしておくことができる。例としてはPageRankのストアに使える。
検索時
Similarity Module
FullTextSearchにおけるクエリとドキュメントの適合度を求めるモジュール
Constant Score Query
return 0.5 if match
Boosting Query
return 0.5 * original_score if match
Function Score Query
return 0.5 * original_score + freshness_score if match
Functionを書くときに使える言語の解説:
Index Boost
2つのIndexの重み付けを定義できる
Rescoreing
より計算コストの高いスコアリングをTop100-500などのドキュメントに対して行うときに使う