elasticsearch - 如何根据不同的对象编写 ElasticSearch Query?
问题描述
在这里,我试图根据 tenant_id 和 hierarchy_name 获取不同的属性名称,这是我的索引数据
{
"hits": [
{
"_index": "emp_indexs_datas_d_v",
"_type": "bulkindexing",
"_id": "84",
"_source": {
"id": "2",
"name": "PRODUCT",
"values": "GEO"
}
},
{
"_index": "emp_indexs_datas_d_v",
"_type": "bulkindexing",
"_id": "88",
"_source": {
"id": "1",
"name": "CUSTOMER",
"values": "CUSTOMER_OPEN_1"
}
},
{
"_index": "emp_indexs_datas_d_v",
"_type": "bulkindexing",
"_id": "98",
"_source": {
"id": "2",
"name": "PRODUCT",
"values": "CUSTOMER_OPEN_2"
}
},
{
"_index": "emp_indexs_datas_d_v",
"_type": "bulkindexing",
"_id": "100",
"_source": {
"id": "1",
"name": "CUSTOMER",
"values": "CUSTOMER-ALL"
}
},
{
"_index": "emp_indexs_datas_d_v",
"_type": "bulkindexing",
"_id": "99",
"_source": {
"id": "2",
"name": "CUSTOMER",
"values": "CUSTOMER_OPEN_2"
}
]
}
这是在这里尝试的查询,我在层次结构名称的基础上获得了不同的属性名称
{
"query": {
"multi_match": {
"query": "CUSTOMER",
"fields": [
"hierarchy_name"
]
}
},
"collapse": {
"field": "attribute_name.keyword"
}
}
现在我想再匹配一个属性tenant_id,以前我匹配的是hierarchy_name,有人可以帮我查询吗
预期输出。比如假设tenant_id 2 和hierarchy_name PRODUCT 我们得到
{
"hits": [
{
"_index": "emp_indexs_datas_d_v",
"_type": "bulkindexing",
"_id": "84",
"_source": {
"tenant_id": "2",
"hierarchy_name": "CUSTOMER",
"attribute_name": "GEO"
}
},
{
"_index": "emp_indexs_datas_d_v",
"_type": "bulkindexing",
"_id": "98",
"_source": {
"tenant_id": "2",
"hierarchy_name": "CUSTOMER",
"attribute_name": "CUSTOMER_OPEN_2"
}
}
]
}
解决方案
您可以使用组合bool/must
子句来组合多个条件
{
"query": {
"bool": {
"must": [
{
"match": {
"tenant_id": 2
}
},
{
"multi_match": {
"query": "PRODUCT",
"fields": [
"hierarchy_name"
]
}
}
]
}
},
"collapse": {
"field": "attribute_name.keyword"
}
}
搜索结果将是
"hits": [
{
"_index": "67379727",
"_type": "_doc",
"_id": "1",
"_score": 1.4144652,
"_source": {
"tenant_id": "2",
"hierarchy_name": "PRODUCT",
"attribute_name": "GEO"
},
"fields": {
"attribute_name.keyword": [
"GEO"
]
}
},
{
"_index": "67379727",
"_type": "_doc",
"_id": "3",
"_score": 1.4144652,
"_source": {
"tenant_id": "2",
"hierarchy_name": "PRODUCT",
"attribute_name": "CUSTOMER_OPEN_2"
},
"fields": {
"attribute_name.keyword": [
"CUSTOMER_OPEN_2"
]
}
}
]
推荐阅读
- java - Java中从头开始的广度优先搜索
- blockchain - 我们如何知道区块链中每个账户的金额?
- reactjs - ECONNREFUSED - 代理来自 React 的 API 请求
- visual-studio-code - VSCode 任务,npm 脚本的用户输入
- ijson - ijson.common.IncompleteJSONError:词法错误:json 文本中的无效字符
- python - 带有 Flask 的 SQLALchemy 中的静态模型实例(夹具)
- azure-pipelines - 从构建中排除分支(Azure Pipelines)
- php - PHP按数组键值排序
- mongodb - 对MongoDB查询的质疑
- sql - 如何使用 SQL Server 触发器将数据插入 table_2(Log)