solr 相似查询-MoreLikeThis

参考文档:

MoreLikeThis

MoreLikeThisHandler

在solr中有两种方式实现MoreLikeThis:
第一种:SearchHandler中的MoreLikeThisComponent,MoreLikeThis以组件的身份出现,适于简单应用。
第二种:MoreLikeThisHandler,MoreLikeThis作为一个单独的Handler来处理,可以应用过滤等较复杂操作

1、采用相似查询的field的存储方式最好采用TermVectors方式,如果field没有采用TermVectors方式,MoreLikeThis将会从store存储中生成terms。

 <field name="cat" ... termVectors="true" />

2、参数说明:

  • mlt.fl    :设置相似查询字段,最好采用TermVectors存储。
  • mlt.mintf   :最小分词频率,源文档中小于该频率的分词将被忽略掉。tf:分词后的词在该文档中的频率
  • mlt.mindf   : 最小文档频率,该词所在文档的个数小于这个值时将不用于相似判断。df:该词所在文档的个数。
  • mlt.minwl :词的最小长度,当词的长度小于该值时不用于相似判断。
  • mlt.maxwl  :词的最大长度,当词的长度大于该值时不用于相似判断。
  • mlt.maxqt  :构造相似查询的terms的最大数量。
  • mlt         : true ,开启相似查询。
  • mlt.count   :为每一个相似查询结果返回指定数量的相似文档。
  • mlt.boost :相似查询是否开启加权功能。true/false
  • mlt.qf     :相似查询field字段加权设置。

    如:mlt.qf=text^0.5 features^1.0 name^1.2

   或者:

       <str name="mlt.qf">
         text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
         title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
       </str>

 

第一种方法:morelikeThis组件为response中的每一个document返回相似查询文档,也许这应该叫做"MoreLikeThese"。

例子:

http://localhost:8983/solr/select?q=apache&mlt=true&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&fl=id,score

 

第二种方法:当你只需要相似查询的相关信息时,可以使用MoreLikeThisHandler。

MoreLikeThisHandler具有以下参数:

rows

控制返回结果的最大数量

mlt.match.include

结果集中是否包含原始的文档

mlt.match.offset

By default, the MoreLikeThis query operates on the first result for 'q'

mlt.interestingTerms

值:"list", "details", "none" --显示相似查询中使用到的相关的terms。这些terms时最高评分的terms。如果选择'details',将会显示每个term的权值。

见MoreLikeThis额外的输入参数。

MoreLikeThisHandler同样也可以使用ContentStream来查找相似文档。它将会从发送过来的文本中抽取相关terms。

示例:

  <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
    <lst name="defaults">
        <str name="mlt.fl">title</str>
        <str name="mlt.mintf">1</str>
        <str name="mlt.minwl">2</str>
        <int name="rows">3</int>
    </lst>
  </requestHandler>

 

  <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
           <lst name="defaults">
           <str name="wt">json</str>
           <str name="fl">id,dept_id,dem_name,dem_dept_id,dem_desc</str>
            <str name="mlt.qf">
                dem_name^2.0 dem_desc^1.0
            </str>
           <str name="mlt.fl">dem_name,dem_desc</str>
           <str name="mlt.match.include">false</str>
           <str name="mlt.mintf">1</str>
           <str name="mlt.mindf">1</str>
           <str name="mlt.minwl">2</str>
           <int name="rows">3</int>
       </lst>

  </requestHandler>

其中<lst name="defaults"> 时查询时默认的参数值,可有可无。

简单例子:

http://localhost:8983/solr/mlt?q=id:UTF8TEST&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1

http://localhost:8983/solr/mlt?q=id:UTF8TEST&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&mlt.match.include=false

http://localhost:8983/solr/mlt?q=id:SP2514N&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&fq=inStock:true&mlt.interestingTerms=details

使用ContentStreams:

If you post text in the body, that will be used for similarity. Alternatively, you can put the posted content in the URL using something like:

http://localhost:8983/solr/mlt?stream.body=electronics%20memory&mlt.fl=manu,cat&mlt.interestingTerms=list&mlt.mintf=0

If remoteStreaming is enabled, you can find documents similar to the text on a webpage:

http://localhost:8983/solr/mlt?stream.url=http://lucene.apache.org/solr/&mlt.fl=manu,cat&mlt.interestingTerms=list&mlt.mintf=0

 

posted @ 2014-10-10 15:42  勿妄  阅读(2476)  评论(0编辑  收藏  举报