我刚开始使用Elasticsearch。我有这样的文件:
{
arr: {
"01": "one phrase",
"02": "another",
"03": 900
},
field1: "val1",
field2: "val2"
}
查找arr
字段中第二个元素以“ano”开头的所有文档以及第三个字段在800 - 1000范围内的所有文档应该是什么?
如果效率太低,我现在可以自由地将这种“架构”改为不同的东西。
我已经阅读了有关嵌套对象的内容,但在此阶段无法理解我是否必须显式命令Elasticsearch为arr
字段内部建立索引。如果我有,我会很感激创建索引命令的示例,其中包含某种“如果存在”,因为应用程序将在每次启动时尝试创建此索引。
谢谢!
答案 0 :(得分:1)
您可以通过访问此网址
来检索映射http://localhost:9200/YOUR_INDEX_NAME_HERE/_mapping
如果在插入条目之前未指定映射,则elasticsearch会通过为您创建它来处理它。点击这里查看更多 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html
我希望它是这样的
{
"my_index": {
"mappings": {
"doc": {
"properties": {
"arr": {
"properties": {
"01": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"02": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"03": {
"type": "long"
}
}
},
"field1": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"field2": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
如果我对映射的假设是正确的,那么这是查询
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"arr.02": {
"value": "ano*"
}
}
},
{
"range": {
"arr.03": {
"gte": 800,
"lte": 1000
}
}
}
]
}
}
}
请注意,范围查询具有包容性,即800<=x<=1000
。如果您想要它是独占的,意味着800<x<1000
,则将查询分别更改为gt
和lt
。