README__ES查询相关.md 13.7 KB

Elasticsearch 查询相关

根据商品ID查询

GET /uat_spu/_search
{
  "query": {
    "term": {
      "_id": "3588136"
    }
  }
}

查label_id

GET /uat_spu/_search
{"query":{"bool":{"must":[{"term":{ "platform_sku_essaone": true  }},{"term":{"label_id_list":166}}]}}}

collapse折叠

GET /spu/_search
{
  "_source": ["_id", "name_zh", "goods_id", "*"],
  "size": 1000,
  "query": {
    "match": {
      "name_zh": {
        "query": "园艺"
      }
    }
  },
  "collapse": {
    "field": "goods_id",       //  goods_id 字段折叠分组
    "inner_hits": {
      "_source": ["_id"],
      "name": "top_docs",      // 自定义内部结果名称
      "size": 3,               // 每组取1个文档
      "sort": [{"_score": "desc"}] // 按评分降序排序
    }
  },
  "sort": ["_score"]          // 确保外层排序兼容折叠功能
}

在架、某平台商品数

GET /uat_spu/_search
{
  "track_total_hits": 100000,
  "query": {
    "bool": {
          "filter": [
            {
              "term": {
                "platform_sku_essaone": true
              }
            },
            {
              "term": {
                "platform_rule_essaone": true
              }
            },
            {
              "terms": {
                "goods_copyright": [
                  "1",
                  "2",
                  "3"
                ]
              }
            }
          ]
          }
  }
}

ID查询

GET /uat_spu/_search
{
  "query": {
    "term": {
      "_id": "3302275"
    }
  }
}

商品名搜索

GET /spu/_search
{
  "_source": {
  },
  "size": 1000,
  "query": {
    "match": {
      "name_zh": {
        "query": "园艺工具四件套",
        "boost": 111.0
      }
    }
  },
  "aggs" :{
            "goods_agg": {
                "terms": {
                    "field": "goods_id",
                    "size": 100
                },
                "aggs": {
                    "top_hits": {
                        "top_hits": {
                            "size": 1,
                            "sort": [{"_score": "desc"}]
                        }
                    }
                }
            }
        }
}

phrase搜索

GET /uat_spu/_search
{
  "_source":["id","goods_id","name_zh"],
  "query":{
                    "multi_match": {
                      "_name": "base_query",
                      "fields": [
                        "name_zh^2.0",
                        "goods_keyword_zh^1.0",
                        "category_name_zh^1.0",
                        "sale_category_keyword_zh^1.0",
                        "sub_name_zh^1.0"
                      ],
                      "query": "戏水玩具"
                    }
      }
}

aggs聚合查询

GET /spu/_search
{
    "_source": {
       "excludes": [
      "embedding_name_zh",
      "embedding_name_ru", "*"
    ],
    "includes": ["_id", "name_zh"]
  },
  "size": 1000,
  "query": {
    "match": {
      "name_zh": {
        "query": "园艺"
      }
    }
  },
  "aggs" :{
            "goods_agg": {
                "terms": {
                    "field": "goods_id",
                    "size": 100
                },
                "aggs": {
                    "top_hits": {
                        "top_hits": {
                            "size": 1,
                            "sort": [{"_score": "desc"}]
                        }
                    }
                }
            }
        }
}

检查某个字段是否有值

GET /uat_spu/_search
{
  "track_total_hits": true,
  "size": 0,          // 不返回 hits,只返回总数
  "query": {
    "exists": {
      "field": "goods_keyword_zh"
    }
  }
}

如果是nested字段,要这么查:

GET /uat_spu/_search
{
  "track_total_hits": true,
  "size": 0,                    // 只看总数
  "query": {
    "nested": {
      "path": "embedding_pic_h14",
      "query": {
        "exists": {
          "field": "embedding_pic_h14.vector"   //  url,只要子文档里任意字段有值
        }
      }
    }
  }
}

分词测试

ik_smart分词器

POST spu/_analyze
{
  "analyzer": "ik_smart",
  "text": "14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝"
}

ik_max_word分词器

POST spu/_analyze
{
  "analyzer": "ik_max_word",
  "text": "14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝"
}

query_ik分词器

POST spu/_analyze
{
  "analyzer": "query_ik",
  "text": "14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝"
}

index_ik分词器

POST spu_test/_analyze
{
  "analyzer": "index_ik",
  "text": "14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝"
}

查商品名

GET /spu/_search
{
  "_source": {
    "includes": [
      "name_zh",
      "category_name_zh",
      "sub_name_zh",
      "label_id_list",
      "brand_id",
      "category_id",
      "price_range",
      "on_sell_days_boost"
    ]
  },
  "collapse": {
    "field": "goods_id",
      "inner_hits": {
    "name": "top_hits",
    "size": 1,
    "_source": false  // 避免返回完整_source
  }
  },
  "from": 0,
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "multi_match": {
                "_name": "base_query",
                "fields": [
                  "name_zh^2.0",
                  "goods_keyword_zh^1.0",
                  "category_name_zh^1.0",
                  "sale_category_keyword_zh^1.0",
                  "sub_name_zh^1.0"
                ],
                "minimum_should_match": "66%",
                "query": "网球",
                "tie_breaker": 0.301
              }
            }
          ]
        }
      }
    }
  },
  "size": 1000,
  "track_scores": true
}

配置相关

查看索引信息

GET /_cat/indices/spu?v
GET /spu/_mapping
GET /spu/_settings

设置刷新时间

PUT /spu/_settings
{ 
  "refresh_interval": -1
}
PUT /uat_spu/_settings
{ 
  "refresh_interval": "600s"
}

设置preload

POST uat_spu/_close
PUT uat_spu/_settings
{
  "index.store.preload": []
}

PUT uat_spu/_settings
{
  "index.store.preload": ["vex", "veq"]
}
# ["nvd", "dvd", "tim", "doc", "dim"]

POST uat_spu/_open

修改分片数目

主分片的数目(number_of_shards)只能创建索引的时候修改

查看索引的分片数量、大小分布

GET _cat/indices/uat_spu?v&s=store.size:desc
GET _cat/shards/uat_spu

类别查询:索引中该类别总数

GET /spu/_search
{
  "track_total_hits": 10000000,
  "query": {"terms": {
      "sale_category_all": [37619]
    }}
}

类别查询:模拟平台规则

除了类别限定,包括:

  1. essaone平台展示过滤
  2. 非专属商品
  3. status 2 4 5
  4. goods_copyright 1,2,3
GET /spu/_search
{
  "track_total_hits": 10000000,
  "aggs": {
    "unique_count": {
      "cardinality": {
        "field": "goods_id"
      }
    }
  },
  "collapse": {
    "field": "goods_id"
  },
  "query": {
            "bool": {
              "filter": [
                {
                  "bool": {
                    "minimum_should_match": 1,
                    "should": [
                      {
                        "term": {
                          "platform_sku_essaone": true
                        }
                      },
                      {
                        "bool": {
                          "must": [
                            {
                              "term": {
                                "platform_rule_essaone": true
                              }
                            },
                            {
                              "bool": {
                                "must_not": {
                                  "exists": {
                                    "field": "platform_sku_essaone"
                                  }
                                }
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "bool": {
                    "must_not": {
                      "exists": {
                        "field": "buyer_id"
                      }
                    }
                  }
                },
                {
                  "terms": {
                    "sale_category_all": [37619]
                  }
                },
                {
                  "terms": {
                    "status": [2,4,5]
                  }
                },
                {
                  "terms": {
                    "goods_copyright": [
                      "1",
                      "2",
                      "3"
                    ]
                  }
                }
              ]
            }
  }
}

关键词查询

GET /spu/_search
{
    "size": 1000,
    "from": 0,
    "_source": {
        "includes": ["name_zh","goods_keyword_zh","sub_name_zh","category_name_zh","goods_keyword_zh","sale_category_keyword_zh"]
    },
    "query": {
    "multi_match": {
                                    "query": "遥控车",
                                    "fields": ["name_zh^3.0", "goods_keyword_zh^1.0", "category_name_zh^1.0", "sale_category_keyword_zh^1.0", "sub_name_zh^1.0"],
                                    "minimum_should_match": "64%",
                                    "tie_breaker": 0.3,
                                    "_name": "base_query"
                                }
    },
    "track_scores": true,
    "collapse": {
        "field": "goods_id"
    }
}

慢查询日志

PUT /spu,spu_test/_settings
{
  "index.search.slowlog.threshold.query.warn": "1s",
  "index.search.slowlog.threshold.query.info": "800ms",
  "index.search.slowlog.threshold.query.debug": "600ms",
  "index.search.slowlog.threshold.query.trace": "400ms",
  "index.search.slowlog.threshold.fetch.warn": "500ms",
  "index.search.slowlog.threshold.fetch.info": "400ms",
  "index.search.slowlog.threshold.fetch.debug": "200ms",
  "index.search.slowlog.threshold.fetch.trace": "100ms"
}
GET /spu,spu_test/_settings?include_defaults=true&filter_path=**.slowlog

一些问题

有一个商品,只命中了"玩具"、没有命中"遥控",两个词命中一个词(注意是所有的字段 总共只命中一个词,玩具命中多次,但是没有任何一个字段有"遥控"),minimum_should_match应该没有达到76%吧,76%是按照什么算的?为什么命中了这个查询条件?

"multi_match": {
  "_name": "base_query",
  "fields": [
    "name_zh^2.0",
    "goods_keyword_zh^1.0",
    "category_name_zh^1.0",
    "sale_category_keyword_zh^1.0",
    "sub_name_zh^1.0"
  ],
  "minimum_should_match": "76%",
  "query": "遥控玩具",
  "tie_breaker": 0.3
}

tie_breaker 导致

GET /spu/_search
{
    "_source": {
       "excludes": [
      "embedding_name_zh",
      "embedding_name_ru", "*"
    ],
    "includes": ["_id", "name_zh"]
  },
  "size": 1000,
  "query": {
    "match": {
      "name_zh": {
        "query": "园艺"
      }
    }
  },
  "aggs" :{
            "goods_agg": {
                "terms": {
                    "field": "goods_id",
                    "size": 100
                },
                "aggs": {
                    "top_hits": {
                        "top_hits": {
                            "size": 1,
                            "sort": [{"_score": "desc"}]
                        }
                    }
                }
            }
        }
}


商品搜索查询模板
```json
GET /spu/_search
{
  "_source": {
    "includes": [
      "name_zh"
    ]
  },
  "aggs": {
    "category_stats": {
      "terms": {
        "field": "sale_category_one_all",
        "size": 100
      }
    },
    "spu_attr_stats": {
      "terms": {
        "field": "attribute_option_list",
        "size": 50
      }
    },
    "unique_count": {
      "cardinality": {
        "field": "goods_id"
      }
    }
  },
  "collapse": {
    "field": "goods_id"
  },
  "from": 0,
  "query": {
    "function_score": {
      "boost_mode": "multiply",
      "functions": [
        {
          "filter": {
            "term": {
              "is_video": true
            }
          },
          "weight": 1.05
        }
      ],
      "query": {
        "bool": {
          "filter": [
            {
              "terms": {
                "status": [2,4,5]
              }
            }
          ],
          "must": [
            {
              "bool": {
                "minimum_should_match": 1,
                "should": [
                  {
                    "multi_match": {
                      "_name": "base_query",
                      "fields": [
                        "name_en^3.0",
                        "goods_keyword_en^1.0",
                        "category_name_en^1.3",
                        "sale_category_keyword_en^1.0",
                        "sub_name_en^1.0"
                      ],
                      "minimum_should_match": "75%",
                      "operator": "AND",
                      "query": "changshen flashing toys",
                      "tie_breaker": 0.9
                    }
                  },
                  {
                    "knn": {
                      "_name": "knn_query",
                      "field": "embedding_name_zh",
                      "k": 40,
                      "num_candidates": 120,
                      "query_vector": [...]
                    }
                  }
                ]
              }
            }
          ]
        }
      },
      "score_mode": "sum"
    }
  },
  "size": 1000,
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ],
  "track_scores": true
}