在elasticsearch中查询



我正在为一个新项目学习弹性。我有一个索引格式:

{
"content_id": "bbbbbb",
"title": "content 2",
"data": [
{
"id": "xx",
"value": 3,
"tags": ["a","b","c"]
},
{
"id": "yy",
"value": 1,
"tags": ["e","d","c"]
}
]
}

如何查询在data中至少有一个元素的内容标签"a"one_answers"b">

?非常感谢!

如何进行查询或重新设计我的格式数据,以方便进行新的查询?

在Elasticsearch中使用列表和嵌套文档有点棘手。

创建索引时,需要为嵌套文档指定映射。您可以通过为数据字段添加映射来实现这一点。

PUT /my_index
{
"mappings": {
"doc": {
"properties": {
"data": {
"type": "nested"
}
}
}
}
}

如果您已经创建了索引,您应该先删除它,然后用映射重新创建它。

在删除索引之前,可以将数据重新索引(复制)到一个新的索引中。

现在您可以使用嵌套查询查询数据字段:

GET /my_index/_search
{
"query": {
"nested": {
"path": "data",
"query": {
"terms": {
"data.tags": [
"j",
"b",
"c"
]
}
}
}
}
}

如果data中至少有一个对象包含ab,则要求获取文档,则需要按照@ChamRun的建议指定nested映射。

但是对于获得具有ab的结果,则需要使用以下查询:

{
"query": {
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"term": {
"data.tags": "a"
}
},
{
"term": {
"data.tags": "b"
}
}
]
}
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新