ElasticSearch 多个查询合二为一
ElasticSearch multiple queries in one
我正在使用 ElasticSearch,我想进行查询。
我有不同的模块:['a', 'b', 'c', 'd']
。
其中 a
和 b
有一个额外的值 (companyId
) 我需要过滤所有模块的文本,但我需要过滤 companyId
只是为了 a
和 b
不适用于模块 c
和 d
.
这看起来像这样:
SELECT * FROM my_table WHERE (modules in ('a', 'b') and companyId='myid') OR (modules in ('b', 'c'))
但是我有这个:
client.search({
index: INDEX,
type: TYPE,
body: {
query: {
bool: {
must: {
match: { text: 'mytext' },
},
filter: [
{ terms: { module: ['a', 'b', 'c', 'd'] } },
{ term: { companyId: 'myid' } },
]
}
}
}
});
如有帮助,非常感谢。
以下查询是您要查找的内容。我已经在 filter
中实现了 OR
运算符,即 should
{
"query": {
"bool": {
"must": {
"match": { "text": "mytext" }
},
"filter": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{ "match": { "module": "a" }},
{ "match": { "companyId": "1" }}
]
}
},
{
"bool": {
"must": [
{ "match": { "module": "b" }},
{ "match": { "companyId": "1" }}
]
}
},
{
"bool": {
"must": {
"match": { "module": "c" }
}
}
},
{
"bool": {
"must": {
"match": { "module": "d" }
}
}
}
]
}
}
]
}
}
}
我正在使用 ElasticSearch,我想进行查询。
我有不同的模块:['a', 'b', 'c', 'd']
。
其中 a
和 b
有一个额外的值 (companyId
) 我需要过滤所有模块的文本,但我需要过滤 companyId
只是为了 a
和 b
不适用于模块 c
和 d
.
这看起来像这样:
SELECT * FROM my_table WHERE (modules in ('a', 'b') and companyId='myid') OR (modules in ('b', 'c'))
但是我有这个:
client.search({
index: INDEX,
type: TYPE,
body: {
query: {
bool: {
must: {
match: { text: 'mytext' },
},
filter: [
{ terms: { module: ['a', 'b', 'c', 'd'] } },
{ term: { companyId: 'myid' } },
]
}
}
}
});
如有帮助,非常感谢。
以下查询是您要查找的内容。我已经在 filter
OR
运算符,即 should
{
"query": {
"bool": {
"must": {
"match": { "text": "mytext" }
},
"filter": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{ "match": { "module": "a" }},
{ "match": { "companyId": "1" }}
]
}
},
{
"bool": {
"must": [
{ "match": { "module": "b" }},
{ "match": { "companyId": "1" }}
]
}
},
{
"bool": {
"must": {
"match": { "module": "c" }
}
}
},
{
"bool": {
"must": {
"match": { "module": "d" }
}
}
}
]
}
}
]
}
}
}