Elasticsearch 6 を使ったデータ検証 その4(チュートリアル記事とデータの検索での比較)

さて、前回に続きようやく Elasticsearch での、データの検索機能を試してみます。

★関連記事
Elasticsearch 6 を使ったデータ検証 その1(Dockerでコンテナの作成と確認)

Elasticsearch 6 を使ったデータ検証 その2(マッピングの登録をしてみる)

Elasticsearch 6 を使ったデータ検証 その3(bulkでデータを投入してみる)

Elasticsearch 6 を使ったデータ検証 その5(クエリでの検索)

Elasticsearch 6 を使ったデータ検証 その6(Aggregationを使った分類・集計)

Elasticsearch 6 を使ったデータ検証 その7(Analyzerについて)

 

 

今回のデータ投入などは以下のサイトを参考にしながらバージョンでの違いなどの確認を行っています。

★Elasticsearchチュートリアル
http://code46.hatenablog.com/entry/2014/01/21/115620

こちらの検索との違いの比較を目的として今回の検索を実施します。

 

元々のサイトでのゴールは以下となっています。

【レストラン検索のゴール】

  • 「地名 料理ジャンル/店名」と言った形でレストランが探せる
  • メニュー名からレストランが探せる(例えば「ハンバーガー」が美味しいお店)
  • PV順・口コミが多い順・評価が高い順など検索結果をソートできる

 

「地名 料理ジャンル/店名」と言った形でレストランを探す

さて、最初に「simple_query_string」というqueryを使っての検索です。

同じ検索を以下で実施で。

はい。Elasticsearch6から「_all」のfieldsは利用できないのでいきなりhitsが0でした。

次に任意のフィールドを指定した検索。

こちらは無事同じ結果が返ってきました。

ただ、スコアを比べると、こちらが「23.290314」で元記事が「3.6026812」なので、スコアリングに大きな変化が見られますね。(Analyzerなども違うのですが)

 

PV順・口コミが多い順・評価が高い順など検索結果をソート

次に検索結果の並び順ソートの確認。

これはPVで並べ替えしているので結果は同じっぽいです。
(元記事が2件しか結果表示していませんが)

ソートなのでここは違いはないでしょう。

 

ドキュメントのスコアを自分で定義する

この辺りからだんだんと結果が面白く。

「望ましい条件を列挙し、どれかにヒットすれば加点」という項目です。

まず、全く同じように実施します。

こちらはエラーとなっています。

これはブーストの値は「boost_factor」が非推奨となり「weight」になったためです。

そこで項目を変えて再度実施。

これは結果がかなり変わりました。

そもそも元記事の方のスコアが「2232.2642」と非常に高いですが、条件にマッチしたら値が大き変わり100、10、10の加算でスコアが大きすぎるような。

こちらのデータでは最大のもので「110」となっており、元のスコアから加算された「100+10」に置き換わっています。

こちらを「replace」ではなく、「sum」に変更してみます。

元のデータに定義したスコアが追加されました。

「ハンバーガー」という名前が他の文字と連続していないお店がよりスコアが高くなっています。

これは実際の検索でお店の名前にマッチ率が高ければスコアが高くなるので結果としては非常に納得がいきます。

今回は元々の記事との比較で違いなどを確認してみましたが、Elasticsearchでは非常に多くのことができるので引き続き検証を行っていきます。

 

★関連記事
Elasticsearch 6 を使ったデータ検証 その1(Dockerでコンテナの作成と確認)

Elasticsearch 6 を使ったデータ検証 その2(マッピングの登録をしてみる)

Elasticsearch 6 を使ったデータ検証 その3(bulkでデータを投入してみる)

Elasticsearch 6 を使ったデータ検証 その5(クエリでの検索)

Elasticsearch 6 を使ったデータ検証 その6(Aggregationを使った分類・集計)

Elasticsearch 6 を使ったデータ検証 その7(Analyzerについて)