是否有办法构建查询,以便识别/返回特定字段重复的文档。我正在寻找的是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小时才能抓取。
答案 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文件]
答案 2 :(得分:1)
如果您尝试在具有高基数的近似唯一字段中获取副本,则可以将facet与术语查询一起使用
{!terms f = partid} partid1,partid2..N&amp; facet = true&amp; facet.field = partid&amp; facet.limit = N&amp; facet.mincount = 2