我想在ElasticSearch中编写一个简单的查询,伪代码看起来像这样:tf.transpose()
。这是我可以提出的查询:
WHERE X==A and (Y in (Y1, Y2) or Y is undefined)
我希望这些文件匹配:
GET sales-staging/_search?filter_path=hits.hits._source
{
"query": {
"bool": {
"must": [
{
"term": {
"A": "X"
}
}
],
"should": [
{
"terms": {
"B": [
"Y1",
"Y2"
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "C"
}
}
]
}
}
],
"minimum_should_match": 1
}
}
}
并且这些不匹配:
{
"A": "X",
"B": "Y1"
},
{
"A": "X"
}
但是,对于这样一个简单的查询来说,这是一个非常大的多行查询,我觉得我错误地使用{
"A": "X",
"B": "Y3"
},
{
"A": "Z",
"B": "Y1"
},
{
"A": "Z"
}
参数来编写一个简单的OR查询。我忽视了一种更简单的方式吗?
我看着SO:
在文档页面上:
但也无法找到答案。