我有这样的消息来源:
{
"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 ?
如果我删除文档。 来自任何键,没有匹配项
有什么区别?
最佳答案
基本上,Elasticsearch在JSON结构内有JSON的两个变体,即 nested
或 object
类型。
您的情况是object
类型。您可以使用以下方式验证mapping或RDBMS术语中的索引模式:
GET <your_index_name>/_mapping
为了基于内部json结构的值进行搜索,您需要包括字段的整个路径,否则elasticsearch会将
questions
视为其在doc
之外的字段。因此,如果您的JSON结构如下所示,则可以通过删除
doc
来工作。{
"questions":[
{
"question":"Sample Question",
"state":"Completed",
"tags":[
"computer"
]
}
]
}
希望您现在能理解为什么为什么不能简单地得到任何结果,因为
questions
的JSON结构从doc
开始。我分享的链接将帮助您澄清。希望有帮助!
关于elasticsearch - Elastic Search中doc.field_name与field_name之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710757/