如何在 SOLR 中获取每个文档的总字数?

Posted

技术标签:

【中文标题】如何在 SOLR 中获取每个文档的总字数?【英文标题】:How to get the total word count per document in SOLR? 【发布时间】:2020-08-31 09:21:21 【问题描述】:

我想从我在 Solr 中索引的文本文档中检索一些摘要统计信息。特别是每个文档的字数。

例如,我对以下三个文档进行了索引:


 "id":"1",
 "text":["This is the text in document 1"],

 "id":"2",
 "text":["some text in document 2"],

 "id":"3",
 "text":["and document 3"]

我想获取每个文档的总字数:

"1",7,
"2",5,
"3",3,

我可以使用什么查询来获得这样的结果?

我是 Solr 的新手,我知道我可以使用构面来获取所有文档中单个单词的计数,例如: http://localhost:8983/solr/corename/select?q=*&facet=true&facet.field=text&facet.mincount=1 但是我不清楚如何获得每个文档的总字数。

感谢您的帮助!

【问题讨论】:

您需要它有多精确?你认为字数是多少?标记的数量(可以大于或小于“单词”的数量 - 取决于您的定义)? 感谢您的评论。你是对的,我应该将其表述为术语或令牌计数。我想计算每个文档的标记数,由分配给相关字段的标记器生成。 【参考方案1】:

如果您对 id 进行分面搜索并在文本上进行内部分面,则内部分面计数将给出该文档中具有该 id 的单词数。但是文本字段类型必须是 text_general 或等效的(标记化的)。

如果您只想计算每个文档 id 的“不同”单词,实际上要容易得多:


"query": "*:*",
"facet": 
    "document": 
        "type": "terms",
        "field": "id",
        "facet": 
            "wordCount": "unique(message)"
        
    


为每个文档提供不同的字数。以下给出了每个文档的所有单词和所有计数,但您可以将它们相加以获得总金额(这也是一个昂贵的电话)


"query": "*:*",
"facet": 
    "document": 
        "type": "terms",
        "field": "id",
        "facet": 
            "wordCount": 
                "type": "terms",
                "field": "message",
                "limit": -1
            
        
    


@MatsLindth 的评论也值得考虑。 Solr 和您可能不同意什么是“单词”。 Tokenizer 在一定程度上是可配置的,但根据您的需要,它可能不是很容易。

【讨论】:

感谢您的回答!这很有帮助。我觉得奇怪的是除了 unique() 之外没有 count() 函数。

以上是关于如何在 SOLR 中获取每个文档的总字数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Solr 中进行 IN 查询?

如何在单个语句中的Northwind数据库的Order Details表中获取每个产品的总销售额?

检索Solr查询中的特定字段?

如何获取所有文件中出现的单词?但是每个目录的单词计数而不是单个数字

检索 Solr 查询中的特定字段?

如何配置 Solr 以提高索引速度