フィルタ クエリ
序章
正確には、ES クエリ操作は查询(query)
との 2 つのタイプに分けられます过滤(filter)
。
- クエリは、以前に使用したクエリ クエリです. これ (クエリ) は、返された各ドキュメントのスコアをデフォルトで計算し、スコアに従って並べ替えます.
- フィルタ クエリ: 最初に条件に一致するドキュメントを除外し、スコアを計算せず、ドキュメントをキャッシュできます。
アプリケーション シナリオ:
- フィルタリングは大規模なデータのフィルタリングに適しており、クエリはデータを正確に照合するのに適しています。
- 通常の状況では、最初にフィルター操作を使用してデータの一部を除外し、次にクエリを使用してデータを正確に照合して、クエリの効率を向上させる必要があります。
使用
- フィルター クエリは bool クエリと一緒に使用する必要があります
GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"match_all": {}} //查询条件
],
"filter": {....} //过滤条件
}
}
知らせ:
- フィルタとクエリを実行するときは、最初にフィルタを実行してからクエリを実行します
- Elasticsearch は、頻繁に使用されるフィルターを自動的にキャッシュして、パフォーマンスを高速化します。
タイプ
用語と用語
term は指定されたフィールドのキーワードをフィルタリングし、term は複数のキーワードをフィルタリングして指定できます
GET /person/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"term": {
"sign": "聪明"
}
}
]
}
}
}
GET /person/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"terms": {
"sign": [
"聪明",
"愚蠢"
]
}
}
]
}
}
}
範囲
指定されたフィールドの値の範囲をフィルタリングします
GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "黄凯宇"
}
}}
],
"filter": {
"range": {
"age": {
"gte": 7,
"lte": 20
}
}
}
}
}
}
存在フィルター
指定されたフィールドが空でないドキュメントをフィルター処理する
GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "中国"
}
}}
],
"filter": {
"exists": {
"field":"aaa"
}
}
}
}
}
ID フィルター
指定された ID 配列でドキュメントをフィルター処理します
GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "中国"
}
}}
],
"filter": {
"ids": {
"values": ["1","2","3"]
}
}
}
}
}