Elasticsearch 6 を使ったデータ検証 その5( クエリ での検索 ) - 株式会社CoLabMix

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

さて、前回に引き続き Elasticsearch での確認となり、今回は クエリ の確認を行っていきます。

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

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

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

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

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

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

 

データは前回までに入力したデータを利用しますが、一点、「restaurant」の「category」を「category1」のデータのみを取り込んだ「keyword」型に変更しています。

「keyword」で使うクエリを利用したかったので変更です。

さて、各クエリの確認に移ります。

OR条件での検索

クエリに複数のmatch条件を入れるとOR条件での検索になります。

 

こちらは明示的にORを指定していませんが、デフォルトの動きとなります。

ちなみにここでは「hits.total」である「10286」件が検索でヒットした数になります。

 

AND条件での検索

AND条件で検索を行うには「operator」句で「and」を指定します。

 

検索結果が「114」件に減り、ANDの条件になりました。

 

ある一定の条件を満たしたものを検索

「minimum_should_match」句を使うと、OR条件の中から一定の数を上回るものを検索結果とします。

ここでは4つのキーワードのうち2つ以上を満たせば検索結果となります。

 

条件に適応する数が増えればスコアが上がります。

 

指定された語順のドキュメントでの検索

「match_phrase」句を使うと指定された語順のもの(空白を含む)にマッチすると検索結果として表示されます。

 

「ラーメン・カレー」は区切り文字として「・」が利用されたので検索対象になりました。
「ラーメン カレー」でもマッチします。

『ラーメンの「風香」、うどん・そばの「一空」、カレー・どんぶり』という文章のものもありますが、間に文章を含んでいるのでマッチしませんでした。

 

keyword型の一致で検索

keyword型の語句に一致するものを検索します。

こちらは完全一致での検索になります。

 

keywordを複数指定しての検索

検索条件の設定が「terms」の複数形になっています。

 

範囲を指定しての検索(数字)

数字の範囲を指定しての検索です。

下では検索対象のデータ型は整数型のものですが、小数点ありの範囲指定のものでも無事範囲指定されて検索が動きました。

 

「以上」、「以下」などのオペレータ名の選択はこちらになります。

オペレータ名 意味
gte 〜以上
lte 〜以下
gt 〜より大きい
lt 〜より小さい

 

日付の範囲を指定しての検索

「range」句では時間の範囲を指定しての検索も可能になります。

以下では検索インデックスの対象が「rating」に変わっていますが、日付型の範囲を指定して検索を実施しています。

 

日付計算式を利用しての検索

日付計算式を利用しての検索は以下のようになります。

 

日付計算式の記号では以下が利用できます。

記号 意味
y
M
w
d
h または H 時間
m
s

 

複合クエリ - Boolクエリ

複合クエリであるBoolクエリでは基本クエリを複数組み合わせて様々な条件での検索を行うことができます。

複合クエリの基本的な文法は以下になります。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

「must」、「filter」、「should」、「must_not」の4つのクエリを使って検索条件の指定を行います。

 

mustクエリ

mustでは条件が必ず含まれているべきクエリを設定します。

must区の中に複数の基本クエリを指定した場合は全ての条件が満たされている必要があります。

 

上記では「description」にラーメンが含まれていて、且つ「access_count」が5千以上の条件のものを抽出しています。

 

shouldクエリ

shouldクエリで複数の基本クエリを指定した場合、いずれかのクエリ条件を満たせばドキュメントがヒットします。

条件に複数ヒットすれば、高いスコアがつけられます。