在Solr中查找重复值

问题描述 投票:0回答:3

有没有办法构建一个查询,以便它识别/返回特定字段重复的文档。我在寻找的是SQL中的等价物:

SELECT content, count(*) FROM documents GROUP BY content ORDER BY count(*) DESC

基本上,给我内容相同的文件。我发现的所有内容都讨论了如何在插入时丢弃重复项,或者如何在搜索结果中删除它们。我尝试使用FieldCollapsing,但是我收到以下错误:

"error": {
  "msg": "can not use FieldCache on a field which is neither indexed nor has doc values: content",
  "code": 400
}

基于错误,我认为它失败了因为content没有编入索引。我尝试使用另一个已编制索引的字段进行分组,而不是多值存储文档URL的字段,但我不能对结果组进行头部或尾部,尤其是groupValue。我可以尝试创建一个索引的复制字段,但我不确定这是否会给我我想要的内容,而且我的爬虫需要超过24小时才能抓取。

solr solr4
3个回答
4
投票

这可以很容易地在Solr中完成。

首先,确保schema.xml已平方,您将执行此操作的字段需要存储和索引。字段的类型应该是字符串(这将按原样维护数据,而不进行标记化)。

接下来,假设字段名称为field1,索引您的内容并为其运行查询。

q=*:*&facet=true&facet.field=field1&facet.mincount=1

您将获得field1的所有值的响应以及相同值的计数。


3
投票

使用facet将产生所需的结果。首先,您需要使用适当的定义在solr中索引字段内容。例如:

<field indexed="true" multiValued="false" name="content" stored="true" type="string_ci"/> 类型基本上映射如下

<fieldType class="solr.TextField" name="string_ci" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.TrimFilterFactory"/> </analyzer> </fieldType>

对于facet查询,请尝试以下 q=:&facet=true&facet.field=content&facet.mincount=-1&facet.sort=count

[https://wiki.apache.org/solr/SimpleFacetParameters][facet文件]

https://wiki.apache.org/solr/SimpleFacetParameters


1
投票

如果您尝试在具有高基数的近似唯一字段中获取重复项,则可以将facet与术语查询一起使用

{!terms f = match} match1,match2..N&facet = true&facet.field = match&facet.limit = N&facet.mincount = 2

© www.soinside.com 2019 - 2024. All rights reserved.