我在elasticsearch中拥有大型文档存储,并希望检索不同的过滤器值以显示在HTML下拉列表中。
一个例子是像
[
{
“ name”:“ John Doe”,
“部门”:[
{
“ name”:“帐户”
},
{
“名称”:“管理”
}
]
},
{
“名称”:“简史密斯”,
“部门”:[
{
“名称”:“ IT”
},
{
“名称”:“管理”
}
]
}
]
下拉列表应包含部门列表,即IT,客户和管理部门。
请问有什么好心的人向我指出正确的方向,以便从Elasticsearch检索不同的部门列表吗?
谢谢
这是terms
聚合(文档)的工作。
您可以使用以下不同的departments
值:
POST company/employee/_search
{
"size":0,
"aggs": {
"by_departments": {
"terms": {
"field": "departments.name",
"size": 0 //see note 1
}
}
}
}
在您的示例中,输出:
{
...
"aggregations": {
"by_departments": {
"buckets": [
{
"key": "management", //see note 2
"doc_count": 2
},
{
"key": "accounts",
"doc_count": 1
},
{
"key": "it",
"doc_count": 1
}
]
}
}
}
另外两个注意事项:
size
为0会将最大存储桶数设置为Integer.MAX_VALUE。如果有太多departments
不同的值,请不要使用它。terms
分析departments
值的结果。确保terms
在映射为的字段上使用汇总not_analyzed
。例如,使用我们的默认映射(departments.name
是一个analyzed
字符串),添加此员工:
{
"name": "Bill Gates",
"departments": [
{
"name": "IT"
},
{
"name": "Human Resource"
}
]
}
会导致这种结果:
{
...
"aggregations": {
"by_departments": {
"buckets": [
{
"key": "it",
"doc_count": 2
},
{
"key": "management",
"doc_count": 2
},
{
"key": "accounts",
"doc_count": 1
},
{
"key": "human",
"doc_count": 1
},
{
"key": "resource",
"doc_count": 1
}
]
}
}
}
使用正确的映射:
POST company
{
"mappings": {
"employee": {
"properties": {
"name": {
"type": "string"
},
"departments": {
"type": "object",
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
相同的请求最终输出:
{
...
"aggregations": {
"by_departments": {
"buckets": [
{
"key": "IT",
"doc_count": 2
},
{
"key": "Management",
"doc_count": 2
},
{
"key": "Accounts",
"doc_count": 1
},
{
"key": "Human Resource",
"doc_count": 1
}
]
}
}
}
希望这可以帮助!
问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的
如何在执行查询前过滤ElasticSearch2.2中的文档。我引用了这个页面,但仍然无法框出正确的查询。 https://www.elastic.co/guide/en/elasticsearch/reference/2.2/query-filter-context.html 这就是我想做的…我有很多应该从句,每个有2个必须从句。WOLLE子句中的任何一个都应该匹配以检索文档。我只包括了一个sh
问题内容: 我的查询是这样的: 它会引发QueryParsingException [[comos_v2] [条件]过滤器不支持[mediaType]] ,而映射中不存在“ mediaType”字段。我的问题是为什么术语过滤器不引发异常? 问题答案: 以上不是有效的查询DSL。在上述条款过滤器中,“ mediaType”字段的值应为数组 应该是以下内容:
我从事elasticsearch,我尝试混合两个工作查询。第一个是“and filter”,第二个是“bool filter”,但我失败了。 我的查询是从用户交互界面动态生成的。 “和过滤器”: 我需要“和过滤器”来查询数据,例如,字段必须等于“非洲”或“亚洲”或为空。这是一个工作查询的示例: 此查询工作正常,结果如下: 现在我需要用字段“D\u TYPESTATUS”来限制结果数据,该字段必须与
问题内容: 我已经花了整整一个星期的时间,没有希望解决它。我关注这篇关于电子商务搜索和多面过滤等的文章(很旧),并且到目前为止效果很好(当在查询中应用过滤器时,搜索结果很好,聚合效果很好。我正在使用ElasticSearch 6.1.1。 但是,由于我想允许我的用户在构面上进行多项选择,因此将过滤器移至post_filter部分。这 仍然运作良好 ,可以正确过滤结果,并准确显示整个文档集的汇总计数
我在ES中有一个多匹配查询,希望添加一个过滤器。 添加此筛选器的语法是什么? 我试过: