elasticsearch 获取所有文档中使用最多的前100个三字短语
我有大约15000个网站,它们的正文存储在弹性搜索索引中。我需要获得所有这些文本中使用最多的前100个三字短语: 大概是这样的:elasticsearch 获取所有文档中使用最多的前100个三字短语,elasticsearch,indexing,lucene,elasticsearch,Indexing,Lucene,我有大约15000个网站,它们的正文存储在弹性搜索索引中。我需要获得所有这些文本中使用最多的前100个三字短语: 大概是这样的: Hello there sir: 203 Big bad pony: 92 First come first: 56 [...] 我是新来的。我研究了术语向量,但它们似乎适用于单个文档。所以我觉得这将是一个结合了术语向量和聚合与n-gram分析的排序。但我不知道如何实施这一点。任何提示都会有帮助 我的当前映射和设置: { "mappings": { "i
Hello there sir: 203
Big bad pony: 92
First come first: 56
[...]
我是新来的。我研究了术语向量,但它们似乎适用于单个文档。所以我觉得这将是一个结合了术语向量和聚合与n-gram分析的排序。但我不知道如何实施这一点。任何提示都会有帮助
我的当前映射和设置:
{
"mappings": {
"items": {
"properties": {
"body": {
"type": "string",
"term_vector": "with_positions_offsets_payloads",
"store" : true,
"analyzer" : "fulltext_analyzer"
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
},
"analysis": {
"analyzer": {
"fulltext_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"type_as_payload"
]
}
}
}
}
}
你要找的是木瓦。木瓦就像“单词n-grams”:一个字符串中多个术语的连续组合。(例如,“我们都住在”、“都住在”、“住在一艘”、“在一艘黄色的潜艇里”、“在一艘黄色的潜艇里”) 请看这里: 基本上,您需要一个具有木瓦分析器的字段,该分析器只生成3项木瓦: 弹性博客文章配置,但具有: 在将shingle analyzer应用到所讨论的字段(如博客文章中所述)并对数据重新编制索引后,您应该能够发出一个查询,返回一个简单的
正文
字段,以查看前100个3字短语
{
"size" : 0,
"query" : {
"match_all" : {}
},
"aggs" : {
"three-word-phrases" : {
"terms" : {
"field" : "body",
"size" : 100
}
}
}
}
只有一个问题,我如何在一个字段中使用多个短语大小。比如两个词的短语,四个词的短语,等等?我需要为每个分析器创建一个索引吗。使用单独的分析器创建单独的字段,只需将正文内容复制到所有字段。然后你可以对每个专门构建的木瓦字段进行切面。我让它在一个索引上使用多个分析器、过滤器和多个字段,就像这样:但完成查询大约需要6分钟。因此需要对此进行调整。索引可能需要一段时间(取决于集合的大小),但该查询应该会在一秒钟左右返回。有了15000个站点,我想你可能会有一个巨大的(内容)站点,每个站点都有几十万个木瓦。如果查询本身的速度确实很慢,请在更大的机器上尝试一个新集群(优先考虑内存和本地SSD存储)。您可能只是在可用物理内存太少的情况下进行交换。
{
"size" : 0,
"query" : {
"match_all" : {}
},
"aggs" : {
"three-word-phrases" : {
"terms" : {
"field" : "body",
"size" : 100
}
}
}
}