基本的な検索に関する前の章に続き、前の章のブログで、ESに大量のデータを挿入し、前のデータに基づいていくつかの高度な操作を
実行します。ESの高度なクエリには独自の言語があります- QueryDSL
ESは、QueryDSLと呼ばれるクエリを実行できるJSONスタイルのDSLを提供します。この言語は非常に包括的ですが、もう少し複雑です。最初に体験してみましょう
。QueryDSLクエリはjsonデータの取得と伝達を通じてリクエストを送信することがわかります。このjsonデータにはクエリ条件が含まれており、その構文形式は次のとおりです。
{
查询名1:{
条件1:值1
},
查询名2:{
条件2:值2
},
.....
}
単語セグメンテーションマッチングクエリに一致
一致クエリは、データが文字の1つと一致する限り、検索条件で単語セグメンテーションマッチングを実行し、クエリが実行され、最終的にスコアに従って返されます。
# 语法格式
# 查询每个字段值为多少的数据,支持模糊查询
GET bank/_search # 请求体
{
"query": {
# 查询
"match": {
# 匹配查询
"FIELD": "TEXT" # 字段:值
}
}
}
match_phraseフレーズ一致
match_phraseは、取得条件全体の値を取得します
GET bank/_search
{
"query": {
"match_phrase": {
"FIELD": "PHRASE"
}
}
}
multi_matchマルチフィールドマッチング
複数のフィールドに特定の値を含むデータをクエリし、クエリ条件で単語セグメンテーションマッチングを実行します
GET bank/_search
{
"query": {
"multi_match": {
"query": "", # 查询条件
"fields": [] # 匹配的字段
}
}
}
ブール複合クエリ
複合クエリは、複数のクエリ条件を組み合わせることができます。これは、mysqlのand条件に相当し、クエリを実行するときにすべての条件が満たされる必要があります。
GET bank/_search
{
"query": {
"bool": {
"must": [ # 必须满足这个条件
{
}
],
"must_not": [ # 必须不是这个条件
{
}
],
"should": [ # 可以包含这个条件
{
}
]
.....
}
}
用語一致クエリ
用語と一致は完全一致を行うことができます。違いは、用語はファジークエリを実行できないことです。用語は検索条件全体の値をクエリします。ただし、ESには、テキストを格納するときにデータ分析の問題があります。これは、単語のセグメンテーションストレージと同等です。したがって、複数のテキストをクエリする場合、用語はデータを見つけることができません。非テキストをクエリする場合は、用語を使用することをお勧めします。
GET bank/_search
{
"query": {
"term": {
"FIELD": {
"value": "VALUE"
}
}
}
}
集計
集計は、データをグループ化してデータから抽出する機能を提供します。最も単純な集計方法は、sql groupbyおよびsql集計関数とほぼ同等です。
GET bank/_search
{
"aggs": {
"NAME": {
"AGG_TYPE": {
}
}
}
}
例1:住所に製粉所が含まれるすべての人の年齢分布と平均年齢を検索します。
例2:年齢別に集計し、これらの年齢グループの平均給与を要求します。
例3:すべての年齢分布とMとFの平均をクエリします。年齢層給与と全体の平均給与