elasticsearch - Elastic Search 中 doc.field_name 与 field_name 之间的区别?
问题描述
我有这样的来源:
{
"doc" : {
"questions" : [
{
"question" : "Which gold customers in Texas had bank accounts with more than $10 million last year ?",
"state" : "COMPLETED",
"tags" : [
"computer"
]
}
]
}
}
当我编写基于状态和标签的搜索查询时,查询看起来像这样,
{
"size": "2000",
"query": {
"bool": {
"must": [
{
"match": {
"doc.questions.state": "COMPLETED"
}
},
{
"match": {
"doc.questions.tags": "computer"
}
}
]
}
},
"from": "0",
"_source": {
"includes": [
"doc.questions.question",
"doc.questions.state",
"doc.questions.tags"
]
}
}
为什么需要写doc.questions.tag而不是questions.tags?
如果我删除doc. 从任何键,没有匹配
区别在哪里?
解决方案
基本上,Elasticsearch在 JSON 结构内有两种 JSON 变体,即 anested
或object
类型。
在您的情况下,它是一种object
类型。您可以使用 RDBMS 术语验证该索引的映射或架构
GET <your_index_name>/_mapping
为了根据内部 json 结构的值进行搜索,您需要包含字段的整个路径,否则 elasticsearch 会将questions
其视为外部字段doc
。
因此,如果您的 JSON 结构如下所示,则可以通过删除doc
.
{
"questions":[
{
"question":"Sample Question",
"state":"Completed",
"tags":[
"computer"
]
}
]
}
希望您现在明白为什么仅仅因为您的 JSON 结构questions
从doc
.
我分享的链接将帮助您澄清。希望有帮助!