スクリーンショット_2017-02-27_19.05.00

4.Elasticsearch 3分でやるbool Query

Author:Makito

頻繁に使うクエリ、bool クエリ さくっと

Bool Query

他のクエリのブール値の組み合わせに一致するドキュメントと一致するクエリ。

データが一つしか多分はいっていないと思うので追加

curl -XPUT http://localhost:9200/tweets/tweet_param/2 -d '
{
"tweet_id" : "791531376998617000",
"user_name" : "@Silky_info",
"tweet" : "スターバックスでスターバックスカードに期間中累計5000円以上チャージする毎に一杯無料のチケットがもらえる… #silkycafe https://t.co/yPzSDL93Mq",
"tweet_create_at": "2016-10-27 15:46:00",
"tweet_create_at": "2016-10-27 16:35:23"
}'
curl -XPUT http://localhost:9200/tweets/tweet_param/3 -d '
{
"tweet_id" : "791555781657100000",
"user_name" : "@copiperin",
"tweet" : "【消費税8%で合計金額777円になるスターバックス商品の組み合わせ】 ドリップコーヒー トールサイズ 320円(税抜き) ミックスサンドイッチ 400円 (税抜き) 店員さんと仲良くなりたい人におすすめ!笑 https://t.co/7TKXyD5uEl",
"tweet_create_at": "2016-10-27 17:22:59",
"tweet_create_at": "2016-10-27 17:35:52"
}'

データを投入したら確認しましょう。

curl -X GET http://localhost:9200/tweets/tweet_param/2?pretty
curl -X GET http://localhost:9200/tweets/tweet_param/3?pretty

実際に叩いてみた〜bool query 

curl -XGET 'http://localhost:9200/tweets/tweet_param/_search?pretty' -d '
{
"query": {
"bool": {
"should": [
{
"match": {
"tweet": "チケット"
}
},
{
"match": {
"tweet": "トールサイズ"
}
}
]
}
}
}'

結果

{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 0.27600175,
"hits" : [
{
"_index" : "tweets",
"_type" : "tweet_param",
"_id" : "3",
"_score" : 0.27600175,
"_source" : {
"tweet_id" : "791555781657100000",
"user_name" : "@copiperin",
"tweet" : "【消費税8%で合計金額777円になるスターバックス商品の組み合わせ】 ドリップコーヒー トールサイズ 320円(税抜き) ミックスサンドイッチ 400円 (税抜き) 店員さんと仲良くなりたい人におすすめ!笑 https://t.co/7TKXyD5uEl",
"tweet_create_at" : "2016-10-27 17:22:59",
"tweet_create_at" : "2016-10-27 17:35:52"
}
},
{
"_index" : "tweets",
"_type" : "tweet_param",
"_id" : "2",
"_score" : 0.26184395,
"_source" : {
"tweet_id" : "791531376998617000",
"user_name" : "@Silky_info",
"tweet" : "スターバックスでスターバックスカードに期間中累計5000円以上チャージする毎に一杯無料のチケットがもらえる… #silkycafe https://t.co/yPzSDL93Mq",
"tweet_create_at" : "2016-10-27 15:46:00",
"tweet_create_at" : "2016-10-27 16:35:23"
}
}
]
}
}

新しくでできた箇所

boolshould

bool:複数のクエリを組み合わせる(AND、OR、NOTで結合)

Boolクエリは4種類あります。

クエリ 説明

must:ANDとして使います。小クエリは総合スコアに影響を与えます

filter:mustと同じくANDです。ただし、スコアは無視されます(総合スコアに影響を与えません)。

should:ORとして使えます。 minimum_should_matchパラメータで最低マッチする条項の数が指定できます1。

must_not:NOTです。

まとめると...

になります。

複数条件のクエリを投げることがよくあるかと思います。

条件を足してより複雑なクエリが書けるようになります。

この記事が気に入ったらサポートをしてみませんか?