Db中有很多项目,其中有很多列。我需要搜索这些列中的两个以获取一个数据集。
第一列genericCode
将包含该代码的所有行组合在一起。
第二列genericId
正在调用要添加的特定行,因为它缺少我正在寻找的genericCode
的列表。
后端C#为我设置了json,如下所示,但未返回任何内容。
{
"from": 0,
"size": 50,
"aggs": {
"paramA": {
"nested": {
"path": "paramA"
},
"aggs": {
"names": {
"terms": {
"field": "paramA.name",
"size": 10
},
"aggs": {
"specValues": {
"terms": {
"field": "paramA.value",
"size": 10
}
}
}
}
}
}
},
"query": {
"bool": {
"must": [
{
"term": {
"locationId": {
"value": 1
}
}
},
{
"terms": {
"genericCode": [
"10A",
"20B"
]
}
},
{
"terms": {
"genericId": [
11223344
]
}
}
]
}
}
}
我得到并清空结果集。如果删除"terms"
中的任何一个,我都会得到期望的结果。因此,我只需要将这些术语组合到一个搜索中即可。
我在这里浏览了很多文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html 仍然似乎找不到我要的东西。
假设我是Jelly Belly,我想用所有的《星球大战》和迪斯尼果冻豆制作一袋果冻豆,我还想添加所有绿色的豆子。基本上,这就是我想要做的。
编辑:将"must"
更改为““ should”`也不太正确。我需要它是(在伪sql中):
SELECT *
FROM myTable
Where locationId = 1
AND (
genericCode = "this", "that
OR
genericId = 1234, 5678
)
locationId
以一种重要的方式分隔了我们的数据。
我发现了这篇文章:elasticsearch bool query combine must with OR 它使我离我越来越近,但并非一直到那里……
我已经尝试了几次迭代should> must> must>必须建立此查询并获得不同的结果,但是没有准确的结果。
答案 0 :(得分:0)
这是正在运行的查询。当我意识到我为我的一个参数传递了错误的数据时,它会有所帮助。 doh
将should
内的must
嵌套在@khachik上面的注释中。我前一段时间有这个,但是由于上述错误而无法使用。
{
"from": 0,
"size": 10,
"aggs": {
"specs": {
"nested": {
"path": "paramA"
},
"aggs": {
"names": {
"terms": {
"field": "paramA.name",
"size": 10
},
"aggs": {
"specValues": {
"terms": {
"field": "paramA.value",
"size": 10
}
}
}
}
}
}
},
"query": {
"bool": {
"must": [
{
"term": {
"locationId": {
"value": 1
}
}
},
{
"bool": {
"should": [
{
"terms": {
"genericCode": [
"101",
"102"
]
}
},
{
"terms": {
"genericId": [
3078711,
3119430
]
}
}
]
}
}
]
}
}
}