elasticsearch - 允许用户在集合中使用OR

标签 elasticsearch

我无法进行 flex 搜索以生成要显示给用户的构面/集合。

TLTR

我不希望这些方面在此站点上表现这些方面:
https://mad.coop.dk/frugt-og-groent#!/frugt-og-baer

想象一个搜索页面,我们在这里显示要出售的汽车。汽车的建模如下:

汽车

{
    "brand": "Ford",
    "color": "Blue"
}

INDEXING

在索引中增加4辆车
POST /agg_analysis/data/_bulk
{ "index": {}}
{ "brand" : "Ford", "color":"Blue" }
{ "index": {}}
{ "brand" : "Ford", "color":"Red" }
{ "index": {}}
{ "brand" : "Toyota", "color":"Blue" }
{ "index": {}}
{ "brand" : "Toyota", "color":"Yellow" }

初始界面

在页面左侧,我们允许用户过滤汽车

enter image description here

初始查询

聚合是直接的
GET /agg_analysis/data/_search
{

  "aggs": {
    "brand": {
      "terms": {
        "field": "brand"
      }
    },
    "color": {
      "terms": {
        "field": "color"
      }
    }
  }
}

使用案例1:找到我一辆蓝色轿车

用户单击颜色:蓝色小平面,小平面和汽车也将相应更新

enter image description here
GET /agg_analysis/data/_search
{
  "query": {
    "term": {
      "color": {
        "value": "blue"
      }
    }
  },
  "aggs": {
    "brand": {
      "terms": {
        "field": "brand"
      }
    },
    "color": {
      "terms": {
        "field": "color"
      }
    }
  }
}

一切都很好,用户很满意

使用案例2:为我找到蓝色或红色的汽车

这是问题开始的地方。当用户单击蓝色复选框时,红色复选框消失。

所以我想要的是所有方面都已更新-除了用户单击的方面之外。

使用案例3:找到我是蓝色或红色的汽车,应该是福特

这是同样的问题。

最佳答案

您只需要更改查询以使用post_filter而不是query,即让对全部文档进行汇总计算,然后才使用post_filter过滤生成的文档。使用query,文档会在之前过滤到,然后才能运行聚合,因此为什么您不再看到所有方面。

GET /agg_analysis/data/_search
{
  "post_filter": {
    "term": {
      "color": {
        "value": "blue"
      }
    }
  },
  "aggs": {
    "brand": {
      "filter": {
        "term": {
          "color": {
            "value": "blue"
          }
        }
      },
      "aggs": {
        "terms": {
          "field": "brand"
        }
      }
    },
    "color": {
      "terms": {
        "field": "color"
      }
    }
  }
}

您还会看到brand聚合被过滤为仅显示blue颜色的品牌。

关于elasticsearch - 允许用户在集合中使用OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38916795/

相关文章:

elasticsearch - Taggit 和 Haystack 与 RealtimeSignalProcessor

elasticsearch - '必须'功能在elasticsearch中不起作用

arrays - ElasticSearch 使用数组进行 bool 搜索

curl - PUT:使用elasticsearch找不到命令

linux - 日志和ELK栈在不同的服务器上,如何显示日志?

elasticsearch - Logstash异常:读取csv文件时出现Errno::EACCES

python - 如何从Python提高Easticsearch的查询准确性?

elasticsearch - 可以在 Elasticsearch 中存储图像吗?

amazon-web-services - 在 AWS 上担任 elasticsearch 角色