我试图弄清楚如何使用elasticsearch查询对象中的特定字段。 我的索引文档如下所示:
{
name : 'thename'
meta : {
title : {value: 'foo is the title'}
headline: {value : 'bar is the headline'}
}
}
我将如何针对meta.title.value
创建查询?
这实际上是支持的吗?
我可以查询这些值而无需指定如下的键:
{
query: 'foo'
}
我得到了正确的结果,但如果我只是想在元对象中搜索特定的键,我就无法弄清楚如何做到这一点。
更具体地说,如果有任何不同,我会将mongoose
与mongoosastic
一起使用。
这里我的文档映射在elasticsearch上:
"mappings": {
"asset": {
"properties": {
"kind": {
"type": "string"
},
"meta": {
"properties": {
"description": {
"properties": {
"value": {
"type": "string"
}
}
},
"headline": {
"properties": {
"value": {
"type": "string"
}
}
},
"visible": {
"type": "boolean"
}
}
}
}
}
}
答案 0 :(得分:4)
特定字段的查询示例:
{
"query": {
"match" : {
"name" : "thename"
}
}
}
在上面的示例中," name"是您要查询的字段的名称。
对于嵌套数据(例如meta.title)的情况,您可以查看"如何查询嵌套字段" 部分。主题https://stackoverflow.com/a/25203970/3917476或查看"嵌套查询" 和"嵌套类型" 文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html#query-dsl-nested-query。
但是,我发现你应该阅读ElasticSearch文档,因为查询特定字段是最基本的事情之一(恕我直言)。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-queries.html
您可以创建多种类型的查询。尝试通过大部分内容(首先,我建议你"匹配","术语"," bool","嵌套", "模糊"和#34;通配符")创建小例子。
修改1
我向您提出建议:不要创建名称为" value"的字段,否则我们将不得不创建无用的嵌套查询。
这是您的映射建议:
"mappings": {
"asset": {
"properties": {
"kind": {
"type": "string"
},
"meta": {
"properties": {
"description": {
"type": "string"
},
"headline": {
"type": "string"
},
"visible": {
"type": "boolean"
}
}
}
}
}
}
使用此映射,您可以使用以下查询:
{
"query": {
"nested": {
"path": "meta",
"query": {
"term": {
"description": "foo"
}
}
}
}
}
否则,您可以将此查询用于现有映射:
{
"query": {
"nested": {
"path": "meta",
"query": {
"nested": {
"path": "description",
"query": {
"term": {
"value": "foo"
}
}
}
}
}
}
}
答案 1 :(得分:-1)
使用mongodb你会想要做这样的事情:
查询:{'meta.title.value': 'foo'}
你显然必须指定一个密钥。如果要查看许多字段,可以使用$或运算符
查询:{$or: [{'meta.title.value': 'foo'}, {'meta.headline.value': 'foo'}]}
这将返回foo
或meta.title.value
meta.headline.value
值为{{1}}的每个文档