我们在Elasticsearch数据库中具有以下索引:
{
index: 'data',
body: {
settings: {
analysis: {
analyzer: {
lowerCase: {
tokenizer: 'whitespace',
filter: ['lowercase']
}
}
}
},
mappings: {
// used for _all field
_default_: {
index_analyzer: 'lowerCase'
},
entry: {
properties: {
id: { type: 'string', analyzer: 'lowerCase' },
type: { type: 'string', analyzer: 'lowerCase' },
name: { type: 'string', analyzer: 'lowerCase' },
blobIds: {
type: 'nested',
properties: {
id: { type: 'string' },
filename: { type: 'string', analyzer: 'lowerCase' }
}
}
}
}
}
}
}
我有一个组合查询,在大多数情况下都能很好地工作,但是对于嵌套字段或非嵌套字段使用_missing_
或NOT _exists_
时失败。
查询如下:
{
filtered: {
filter: {
or: {
filters: [
{
nested: {
path: ['blobIds'],
query: {
query_string: {
query: searchString
}
}
}
},
{
query: {
query_string: {
query: searchString
}
}
}
]
}
}
}
}
以下是有效查询的示例:
_exists_:blobIds
:仅返回包含附件的条目type:*test*
:仅返回类型与 test 但是,以下查询失败:
_missing_:blobIds
:应该返回缺少blobIds字段的所有条目。返回带有和不带有blobId的条目的混合NOT _exists_:blobIds
:与上述相同(尝试使用https://github.com/elastic/elasticsearch/issues/14112#issue-111395900中的注释)_exists_:blobIds AND type:*test*
:该组合也不起作用也对以下查询进行了相同的查询,但未更改,行为相同:
{
bool: {
should: [
{
nested: {
path: ['blobIds'],
query: {
query_string: {
query: searchString,
fields: ['blobIds.id', 'blobIds.filename']
}
}
}
},
{
query_string: {
query: searchString
}
}
]
}
}
是否可以进行此类查询?
中定义的运算符使用version1.7(我知道它太旧了,但目前无法更新)