elasticsearch:结合查询嵌套字段和非嵌套字段

时间:2019-07-18 13:59:28

标签: elasticsearch

我们在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
  • 匹配的条目

但是,以下查询失败:

也对以下查询进行了相同的查询,但未更改,行为相同:

{
    bool: {
        should: [
            {
                nested: {
                    path: ['blobIds'],
                    query: {
                        query_string: {
                            query: searchString,
                            fields: ['blobIds.id', 'blobIds.filename']
                        }
                    }
                }
            },
            {
                query_string: {
                    query: searchString
                }
            }
        ]
    }
}

是否可以进行此类查询?

我们的用户希望能够使用https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-query-string-query.html#query-string-syntax

中定义的运算符

使用version1.7(我知道它太旧了,但目前无法更新)

0 个答案:

没有答案