4

我在使用 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 个文档。会不会是这样?

4

2 回答 2

3

不确定它是否会有所帮助。尝试指定

“min_doc_count”:1

于 2016-12-21T15:27:10.003 回答
0

重要术语聚合需要一定量的数据才能生效,而我的索引中只有 163 个文档。会不会是这样?

如果您有少量文档,使用 1 个分片而不是 5 个分片会有所帮助。

于 2016-06-08T15:49:08.650 回答