知识库 : UDH Search去重与分组

Edit Document

 

 

 

 

 

 

 

 

 

UDH Search去重与分组

 

 

作者 费英林


目录

1.               索引数据去重

1.1.               修改 solrconfig.xml

1.2.               修改 schema.xml

1.3.               验证

2.               索引数据分组

2.1.               修改 schema.xml

2.2.               分组示例

 

 

 

1.     索引数据去重

    去重的目的是阻止重复或近似重复的文档进入索引数据。

1.1.     修改 solrconfig.xml

下面是一个配置实例。字段 signatureID 用做一个文档的 Unique ID ,它是一个虚拟字段,代表字段 data_f1 data_f2 的组合, data_f1 data_f2 是实际存在的字段。即 data_f1 data_f2 组合的值必须是唯一的,如果重复,已在索引中的数据会被覆盖。

     <updateRequestProcessorChain name=" dedupe ">

       <processor class="solr.processor.SignatureUpdateProcessorFactory">

         <bool name="enabled">true</bool>

         <str name="signatureField">signatureID</str>

         <bool name="overwriteDupes">false</bool>

         <str name="fields">data_f1,data_f2</str>

         <str name="signatureClass">solr.processor.Lookup3Signature</str>

       </processor>

       <processor class="solr.LogUpdateProcessorFactory" />

       <processor class="solr.RunUpdateProcessorFactory" />

     </updateRequestProcessorChain>

 

 

启用去重:

  <requestHandler name="/update" class="solr.UpdateRequestHandler">  

       <lst name="defaults">

         <str name="update.chain"> dedupe </str>

       </lst>

  </requestHandler>

1.2.     修改 schema.xml

uniqueKey 设置为 signatureID (原值是 ID ,需要替换掉):

              <uniqueKey>signatureID</uniqueKey>

 

fields 属性组中添加属性 signatureID

<field name="signatureID" type="string" stored="true" indexed="true" required="true" multiValued="false" />

 

修改 fields 属性组中的属性 ID ,将 required true 改为 false

<field name="id" type="string" indexed="true" stored="true" required="false" multiValued="false" />

1.3.     验证

重建索引,查看结果,确认:

         结果中是否存在重复数据

         后面的重复数据会覆盖前面的数据

2.     索引数据分组

2.1.     修改 schema.xml

分组的字段要求不能是 tokenized 的字段,需要定义为 string 类型。假如我们需要依据 other_articles_title 进行分组,由于 other_articles_title 是定义为中文分词类型的,直接使用这个字段无法实现分组的效果。我们需要另建一个字段 other_articles_title_nt 用于分组:

<field name="other_articles_title" type="text_ik" indexed="true" stored="true"/>

<field name="other_articles_title_nt" type=" string " indexed="true" stored="true"/>

2.2.     分组示例

select?q=*%3A*&group=true&group.field=other_articles_title_nt

查询条件为任意字段的任意值,设置 group true ,分组字段为 other_articles_title_nt ,每组默认显示分值最高的 1 条记录,默认显示 10 个分组。

 

select?q=*%3A*&group=true&group.field=other_articles_title_nt&group.limit=3

同上。每个分组内显示前 3 条分值最高的记录。

 

select?q=*%3A*&group=true&group.field=other_articles_title_nt&rows=100

同上。每个分组内显示分值最高的 1 条记录,显示 100 个分组。

 

select?q=*%3A*&group=true&group.field=other_articles_title_nt&group.limit=3&rows=100

同上。每个分组内显示分值最高的 3 条记录,显示 100 个分组。

 

select?q=other_articles_sitename:"sina"&group=true&group.field=other_articles_title_nt&group.limit=3&rows=100

查询条件为 site name 是新浪,设置 group true ,分组字段为 other_articles_title_nt ,每组默认显示分值最高的 3 条记录,显示 100 个分组。

 

select?q=other_articles_sitename:"sina"&group=true&group.field=other_articles_title_nt&group.limit=3&rows=100&group.ngroups=true

同上。显示分组个数。

 

select?q=other_articles_sitename:"sina" AND other_articles_source:" 新浪科技 "&group=true&group.field=other_articles_title_nt&group.limit=3&rows=100

(或者

select?q=other_articles_sitename:%22sina%22%20AND%20other_articles_source:%22%E6%96%B0%E6%B5%AA%E7%A7%91%E6%8A%80%22&group=true&group.field=other_articles_title_nt&group.limit=3&rows=100

查询条件为 site name 是新浪并且来源是新浪科技,设置 group true ,分组字段为 other_articles_title_nt ,每组默认显示分值最高的 3 条记录,显示 100 个分组。

 

Attachments:

技术分享-几种数据采集技术的简介.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
UDH Web框架简介.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
技术分享-UDH Search去重与分组.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)