我在使用 Elasticsearch(2.0 版)时遇到问题,我试图从一堆文档中获取重要的术语,但它总是什么都不返回。
这是我的索引的架构:
{
"documents" : {
"warmers" : {},
"mappings" : {
"document" : {
"properties" : {
"text" : {
"index" : "not_analyzed",
"type" : "string"
},
"entities": {
"properties": {
"text": {
"index": "not_analyzed",
"type": "string"
}
}
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1447410095617",
"uuid" : "h2m2J9sJQaCpxvGDI591zg",
"number_of_replicas" : "1",
"version" : {
"created" : "2000099"
},
"number_of_shards" : "5"
}
},
"aliases" : {}
}
}
因此,它是一个简单的索引,其中包含text
不分析的字段,以及一个entities
包含单个字段的字典的数组:text
也不分析。
我想要做的是匹配一些文档并从关联的实体中提取最重要的术语。为此,我使用通配符,然后使用聚合。
这是我发送的请求curl
:
curl -XGET 'http://localhost:9200/documents/_search' -d '{
"query": {
"bool": {
"must": {"wildcard": {"text": "*test*"}}
}
},
"aggregations" : {
"my_significant_terms" : {
"significant_terms" : { "field" : "entities.text" }
}
}
}'
不幸的是,即使 Elasticsearch 正在访问某些文档,重要术语聚合的存储桶始终是空的。
我试着把analyzed
而不是not_analyzed
也,但我得到了同样的空结果。
那么首先,这样做是否相关?
我是 Elasticsearch 的初学者,所以,你能解释一下重要的术语聚合是如何工作的吗?
最后,如果相关,为什么我的查询不起作用?
编辑:我刚刚在 Elasticsearch 文档中看到,重要的术语聚合需要一定数量的数据才能生效,而我的索引中只有 163 个文档。会不会是这样?