在Solr中查找重复值

时间:2014-09-23 13:20:50

标签: solr solr4

是否有办法构建查询,以便识别/返回特定字段重复的文档。我正在寻找的是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小时才能抓取。

3 个答案:

答案 0 :(得分:4)

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

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

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

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

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

答案 1 :(得分:3)

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

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

<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

答案 2 :(得分:1)

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

{!terms f = partid} partid1,partid2..N&amp; facet = true&amp; facet.field = partid&amp; facet.limit = N&amp; facet.mincount = 2