1 回答
TA贡献1863条经验 获得超2个赞
使用 Elasticsearch 可以轻松实现,您应该将其定义shop_id为关键字字段,然后在查询的过滤上下文中使用它,以确保您仅搜索属于特定的产品shop_id。
在过滤器上下文中使用shop_id还可以显着提高搜索性能,因为这些默认缓存在 Elasticsearch 中,如官方文档中所述
在过滤器上下文中,查询子句回答“此文档是否匹配此查询子句?”的问题。答案很简单,是或否——不计算分数。过滤上下文主要用于过滤结构化数据,例如
状态字段是否设置为“已发布”?
Elasticsearch 会自动缓存常用的过滤器,以提高性能。
根据您的要求进行示例映射和查询:
索引映射
{
"mappings" :{
"properties" : {
"product" : {
"type" : "text"
},
"shop_id" :{
"type" : "keyword"
}
}
}
}
2 个差异商店 ID 的索引示例文档
{
"product" : "foo",
"shop_id" : "stackoverflow"
}
{
"product" : "foo",
"shop_id" : "opster"
}
搜索fooshop_id 所在的产品stackoverflow
{
"query": {
"bool": {
"must": [
{
"match": {
"product": "foo"
}
}
],
"filter": [
{
"term": {
"shop_id": "stackoverflow"
}
}
]
}
}
}
搜索结果
"hits": [
{
"_index": "productshop",
"_type": "_doc",
"_id": "2",
"_score": 0.18232156,
"_source": {. --> note only foo belong to `stackoverflow` returned
"product": "foo",
"shop_id": "stackoverflow"
}
}
]
- 1 回答
- 0 关注
- 130 浏览
添加回答
举报