我有一个形式的ES索引
{
"adminfile" : {
"mappings" : {
"properties" : {
"text" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
字段“title”是字段“text”中找到的字符串的标题。标题不包含任何空格,而文本是普通文本(带空格和点的句子等)。
我想获取索引中的所有术语及其doc_count和/或频率。我在ES文档中找到了这个查询:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
GET /adminfile/_search
{
"size": 10,
"aggs" : {
"text" : {
"terms" : {
"field" : "text.keyword",
"order" : { "_count" : "asc" },
"size": 10
}
}
}
}
这将返回所有源,但聚集桶为空。如果我在这个命令中把“text.keyword”改为“title.keyword ”,它确实可以工作,并返回所有标题作为关键字。
为什么它不适用于文本字段?
有更好的命令可以使用吗?我知道这个:
GET /adminfile/_search
{
"query" : {
"match" : {"text" : "WordToSearch"}
},
"_source":false,
"aggregations": {
"keywords" : {
"significant_text" : {
"field" : "text",
"filter_duplicate_text": true,
"size": 100
}
}
},
"highlight": {
"fields": {
"text": {}
}
}
}
工程获得所有的wordToSearch出现在每个文件的索引,计数和频率。有没有办法让这个命令匹配每个doc的每个单词?
编辑:我还尝试将文本字段的名称改为“contenu ”,以防ES不喜欢名称为“text”且类型为“text”的字段。没有效果。
另一种选择可能是使用https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html但it_termvectors仅适用于一个特定ID(或_mtermvectors适用于多个特定ID,在任何情况下都不是所有文档)
编辑2:我意识到ignore_above可能是个问题。作为测试,我尝试将所有文本剪切为200个字符。查询现在正在运行,除了它将整个文本作为键返回,而不是将其剪切为单词。
当您使用字段的< code>keyword版本时,内容被保存为单个大型标记。您认为< code>ignore_above是问题的根源是正确的,因为在您的数据集中,这些标记显然会超过256个字符。
如果您改为跨标记化字段(普通文本字段)聚合,而不是关键字
版本,您将获得该字段处理的每个单词(即每个标记)的计数。
问题内容: 给定字符串: 如何获得每个字符的出现次数? 问题答案: 效率不高,但是只有一行…
问题内容: 我有一个数组如下 预期结果 尝试如下 问题答案: 无需使用jQuery即可完成此任务-此示例将构建一个对象,其中包含数组中每个不同元素的出现次数
问题内容: 如果我有英文文章或英文小说,并且想计算每个单词出现多少次,用Java编写的最快算法是什么? 有人说您可以使用Map ()完成此操作,但我想知道如何知道关键字是什么?每篇文章都有不同的词,您如何知道“关键”词,然后在其数量上加上一个? 问题答案: 这个数字“我是”只是一个字
本文向大家介绍C++计算每个字符出现的次数,包括了C++计算每个字符出现的次数的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++计算每个字符出现的次数的实现代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。
问题内容: 有什么方法可以计算数组中每个项目的出现? 可以说我有: 这里的输出将是: 如果我有: 输出为: 这里的输出只是为了展示预期的结果。 问题答案: 你可以使用来自Google Collections / Guava的或来自Apache Commons的。 如果你有一个集合而不是一个数组,则可以用于addAll()将整个内容添加到上述数据结构中,然后将该方法应用于每个值。一个或会给你以定义的
我有一个7x12的2d数组。我一直在研究如何获得它的每一列和每一行的总和,并将每个结果放入列表中,一个是每列总和的结果,另一个是每个行的结果。 因此,对于列,我想将每列的结果保存在一个临时整数变量中,在每一行中使用“a”进行迭代,当“a”等于12(即行数)时,然后检查“p”(即列数)是否等于7并退出循环(这意味着每列的总和已添加到新数组中),如果不是这样,则临时变量将被添加到新数组中,临时变量和“