我对 ElasticSearch 并不陌生,但这个看似简单的查询返回的结果为零,这令人困惑。弹性版本 7.10.2。
映射:
{
"test-index-v43": {
"mappings": {
"properties": {
"addresses": {
"type": "nested",
"properties": {
"address": {
"type": "text",
"store": true
}
}
},
"aliases": {
"type": "nested",
"properties": {
"alias_name": {
"type": "text",
"store": true
}
}
},
"identities": {
"type": "nested",
"properties": {
"identity": {
"type": "text",
"store": true
}
}
}
}
}
}
}
aliases
数组是此问题中唯一真正重要的数组,但希望提供完整映射以防万一。
查询:
GET test-index-v43/_search
{
"query": {
"nested": {
"path": "aliases",
"query": {
"match": {
"aliases.alias_name": "Joseph Shmoseph"
}
}
}
}
}
没有返回结果,但是这个文档存在于索引中,所以不明白为什么不返回:
{
"_index" : "test-index-v43",
"_type" : "_doc",
"_id" : "1234",
"_score" : 1.0,
"_source" : {
"alias_name" : "Joseph Shmoseph",
"address" : {
"houseNumber" : "123",
"road" : "Main St.",
"city" : "New York City",
"postCode" : "12345-6789",
"country" : "USA"
}
}
}
我一定遗漏了一些明显的东西吗?
答案 0 :(得分:1)
问题中给出的索引数据不符合定义的索引映射格式。没有 aliases
字段名称(定义为 nested
类型)。
由于您编入索引的数据没有 aliases
作为嵌套路径,因此当您尝试使用 "path": "aliases"
运行搜索查询时,它不会显示任何结果。>
搜索查询不会抛出任何错误,因为您已经在索引映射中将 aliases
定义为嵌套类型。
Elasticsearch 使用动态映射来定义新字段(在索引新文档时添加),如果未定义索引映射,则运行以下搜索查询,您将获得结果
{
"query": {
"match": {
"alias_name": "Joseph Shmoseph"
}
}
}
否则需要按照以下格式对数据进行索引
{
"aliases": {
"alias_name": "Joseph Shmoseph"
}
}
现在运行相同的搜索查询(如问题所示)给出以下结果
"hits": [
{
"_index": "67235408",
"_type": "_doc",
"_id": "1",
"_score": 0.5753642,
"_source": {
"aliases": {
"alias_name": "Joseph Shmoseph"
}
}
}
]