Javascript 我是否必须指定映射才能在Kuzzle中使用document.search控制器?
我使用Kuzzle是为了构建一个简单的类似slack的应用程序。我有一个只包含其他文档ID的文档的简单集合。 我想从这个集合中查询一个id列表,但在响应中遇到了一个空的hits数组,无论我在查询中尝试了什么id值。它让我了解了Elasticsearch查询语法和映射,我发现我需要指定一个映射 在未指定映射的情况下创建集合时,document.search:Javascript 我是否必须指定映射才能在Kuzzle中使用document.search控制器?,javascript,
elasticsearch,sdk,kuzzle,Javascript,
elasticsearch,Sdk,Kuzzle,我使用Kuzzle是为了构建一个简单的类似slack的应用程序。我有一个只包含其他文档ID的文档的简单集合。 我想从这个集合中查询一个id列表,但在响应中遇到了一个空的hits数组,无论我在查询中尝试了什么id值。它让我了解了Elasticsearch查询语法和映射,我发现我需要指定一个映射 在未指定映射的情况下创建集合时,document.search: 如果给定“查询”正文属性(如以下内容),则返回空的命中数组: {"query": {"terms": {"id": <ids arr
- 如果给定“查询”正文属性(如以下内容),则返回空的命中数组:
{"query": {"terms": {"id": <ids array>}}}
- 并为“聚合”返回一个空的存储桶列表,如下所示:
"aggregations": { "groupById": { "terms": { "field": "id" } } }
非常感谢 Elasticsearch映射是告诉底层引擎如何索引文档字段的一种方法 例如,字段的索引方式与字段不同,您将无法进行相同类型的查询
关键字
字段按“原样”编制索引,所以您可以(使用)对精确的术语进行非常快速的搜索,但文本
字段使用各种方法进行分析,以便能够执行一个示例
如果字段没有声明的映射,Elasticsearch将无法在任何查询中访问它
您可以阅读我们的网站以了解更多信息
关于,默认情况下,此策略设置为false
,这意味着ES不会推断新引入的字段类型
我们选择使用此默认值是因为您无法修改字段的类型,因此最好自己定义它,而不是使用ES推断的精度较差的类型
您可以为整个映射更改此策略,但也可以仅为嵌套对象更改此策略(例如,这被视为最佳做法)
然后,如果创建以下文档:
{
"id": "your-unique-uuid",
"name": "aschen",
"metadata": {
"avatar": "http://url.com"
}
}
字段已声明为id
,您可以进行查询 在这个领域关键字
字段未声明,动态策略为name
因此,您不能在此字段上进行查询false
字段未声明,但动态策略 因为这个嵌套对象是metadata.avatar
,所以ES将为 此字段,可在此字段进行查询true
id
字段,但Elasticsearch已经为每个文档生成了唯一标识符(\u id
),因此您可能希望使用此字段
我是Kuzzle core的开发者谢谢!遗漏了映射动态策略:')最后一件事,我的查询在没有提供映射的情况下搜索“id”字段时不会引发错误,而是返回空的hits数组,这是预期的行为吗?是的,这是Elasticsearch默认行为。但是,如果你试图在这个字段上排序,我想你会得到一个错误
{
"dynamic": "false",
"properties": {
"id": { "type": "keyword" },
"metadata": {
"dynamic": "true",
"properties": {
// field types will be automatically inferred in the "metadata" object
}
}
}
}
{
"id": "your-unique-uuid",
"name": "aschen",
"metadata": {
"avatar": "http://url.com"
}
}