Solr的查询结果去重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr的查询结果去重相关的知识,希望对你有一定的参考价值。

参考技术A Group将具有公共字段值的文档进行分组,并返回每个组的顶部文档(可以指定排序)。但是最终的结果是展示在 grouped 这个结果集中。

Collapsing 和 Expand 组件结合起来,可以在 Solr 搜索结果中根据指定字段折叠,从而对文档分组去重的效果。
Collapsing常规用法是写在fq中,最简单的启用方式如下示例:

Collapsing功能是在每个shard搜索上进行折叠,但是在最终汇总结果时并没有再次按照相应的折叠方式进行合并,导致可能出现的情况就是同一个分组出现多次。

在索引数据时使用路由,使用折叠字段作为路由字段,这样就可以把具有相同值的文档索引到同一个分片(但是这样也有坏处,可能会导致索引数据分布不均,海量数据下影响不大)。

在创建collection时使用以下两个参数

带连字符的Solr查询返回零结果

我有一个索引文档,如下所示:

{"id:"abcde-efgr-jhik","domain": "http://www.play-bugs.com/index.com}

在域字段上,我使用text_general作为数据类型。

我试图查询这个文件使用

q=domain:play-bugs

如果我使用它,它不会返回任何结果

q=domain:play-bugs.com

它给了我预期的结果。我试图在“ - ”字符上使用“/”但没有运气。

编辑:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

答案

这是使用Solr的Standard Tokenizer时的预期行为。

此标记生成器将文本字段拆分为标记,将空格和标点符号视为分隔符。除去分隔符字符,但以下情况除外:

  • 未跟随空格的句点(点)将作为标记的一部分保留,包括Internet域名。
  • “@”字符属于令牌分割标点符号集,因此电子邮件地址不会保留为单个标记。

请注意,单词以连字符分开。

text_general从输入流接收到domain的内容时,它被标记为如下:

  • http://www.play-bugs.com/index.com => http | www.play |bugs.com| index.com
  • play-bugs => play | bugs
  • play-bugs.com => play |bugs.com

您可以看到play-bugs.com可以匹配bugs.com,而play-bugs则不能,因为当没有空格后,点不被视为分隔符。索引中没有令牌"bugs",因此即使查询q=domain:bugs也不会匹配它。

您可以尝试使用另一个也在点上分割的标记生成器,或者添加像Word Delimiter Graph Filter这样的过滤器来正确分割生成的标记。

以上是关于Solr的查询结果去重的主要内容,如果未能解决你的问题,请参考以下文章

Solr/Lucene使用docValue查询的一个坑

Solr聚合查询

SOLR查询过滤结果中的自定义排序?

对linq查询结果进行去重处理

Solr分组聚合查询之Facet

solr查询参数