sunburnt 学习笔记 (五)模糊查询

来源:互联网 发布:徐州八方网络 编辑:程序博客网 时间:2024/05/16 17:46

转载请声明出处:http://blog.csdn.net/wbcg111/article/details/47450975

模糊搜索(MLT)是solr提供的用来比较文件的一个特征,你可以查询与某个文件相似的他文件。
模糊查询可以是标准查询的一部分,在这种情况下,你不但要让solr立即返回搜索结果,还有让solr返回与你得到的结果相似的一些结果。

或者,你可以给solr提供一份不在索引中的文档,并对那篇文档做模糊搜索。

第一种在之前的More Like This中已经讲过(http://blog.csdn.net/wbcg111/article/details/47441423),我们会在这里展示第二种情况。

比如这份文档,在查询solr就是一个章节。你没必要每一节都知道的特别详细,但是我们知道的更详细,我们就会用的越好。

Basic MLT query(基础的模糊查询)

在此我们不再调用query()方法,而是使用mlt_quey()方法。

si.mlt_query(content=open("localfile").read())

我们需要给模糊搜索一些内容(本例中的内容来自本地文件);模糊搜索就会接收这个文本,并会对它进行分析,并根据分析结果查找出相似的文件。

因为我们没有指定我们特别关心的字段,所以它是什么,相似计算就会默认字段进行。返回结果与mlt()方法的返回结果格式相同。

Further MLT query options(更深一步的模糊查询)

如果我们想要在一个字段或者几个字段上进行相似计算,那么我们可以如下指定:

si.mlt_query(content=open("localfile").read(), fields="name")si.mlt_query(content=open("localfile").read(), fields=["name", "author_t"])

我们可以了解更多关于为什么我们得到我们要求的MLT文件分析的结果。

i.mlt_query(content=open("localfile").read(), interestingTerms="list")si.mlt_query(content=open("localfile").read(), interestingTerms="details")

“list”将会返回一个interesting提取列表,”details”会为每项提供详细的权重。

如果你提供的文件是UTF-8编码格式(或等价的ASCII码),那么你需要使用指定的字符集(字符集列表:

Sourcing content from the web(来自网络的资源内容)

你也可以选择通过指定url来让solr从网络获取文件:

si.mlt_query(url="http://example.com/document")

除了content_charset,上面其他所有的选项都来自网络文件,文件编码取决于文件所在的网站编码。
在上面的所有情况下,你可以指定除了count之外在mlt()列出来的所有参数。

MLT queries on indexed content(基于索引的模糊查询)

你可以用下面的方式在已建立的索引上面运用模糊查询:

si.mlt_query().query(...)

IE初始化一个空mlt_query()对象,然后运行查询就可以正常进行查询。在对索引内容进行查询时,支持查询操作的全部操作:

si.mlt_query().query(title='Whale').exclude(author='Melville').query(si.Q('Moby')|si.Q('Dick'))

Chaining MLT queries(链式模糊查询)

像query()方法一样,mlt_query()也支持链式查询,有一点点差异需要说明:

  • 如果模糊查询基于没有建立索引的本地文件或者网络文件,你不能链式调用query()或者exclude()方法
  • 你不能一次链式调用多个mlt_query(),因为一次只能分析一份文件。
0 0
原创粉丝点击