飞快移动邻近 搜索

问题描述 投票:0回答:1

我想知道,如何使用邻近搜索与飞快移动。我已经阅读了飞快移动的文档。在文档中写道,通过使用class whoosh.query.Phrase(fieldname, words, slop=1, boost=1.0, char_ranges=None)曾经能够使用邻近搜索。

例如,我需要在索引中找到“Hello World”,但“Hello”应该与单词“World”有5个字的距离。

截至目前,我正在使用以下代码,并且它与普通解析器一起工作正常。

from whoosh.query import *
from whoosh import qparser

index_path = "/home/abhi/Desktop/CLIR/indexdir_test"

ix = open_dir(index_path)

query='Hello World'

ana = StandardAnalyzer(stoplist=stop_word)


qp = QueryParser("content", schema=ix.schema,termclass=Phrase)
q=qp.parse(query)
with ix.searcher() as s:
   results = s.search(qp,limit=5)
   for result in results:
       print(result['content']+result['title'])
       print (result.score)
   print(len(results)) 

伙计们,请帮助我如何使用类whoosh.query.Phrase(fieldname,words,slop = 1,boost = 1.0,char_ranges = None)'来使用邻近搜索并改变单词之间的距离。提前致谢

full-text-search information-retrieval whoosh
1个回答
0
投票

你想要的是一个5的slop因子。

几点:

  1. 当你搜索时,你必须传递查询(q),而不是查询解析器(qp)results = s.search(q, limit=5)
  2. limit指的是要返回的最大文档数,而不是slop因子。您的limit=5参数表示您想要获得最多5个搜索结果(如果您认为这是slop)。
  3. 你可以删除termclass=Phrase

您可以通过两种方式构建短语查询:

  1. 使用查询字符串。适合传递用户查询。将~和slop因子附加到邻近搜索的短语。如果您希望短语术语最多相隔5个字:"hello world"~5
  2. 使用SpanNear2查询。允许您以您希望的方式以编程方式构建它。将所有短语术语作为Term对象数组传递,并将slop指定为构造函数参数。
from whoosh.query import spans

with ix.searcher() as s:

# Option 1: Query string
  query   = '"Hello World"~5'
  qp      = QueryParser("content", schema=ix.schema)
  q       = qp.parse(query)
  results = s.search(q, limit=5)

# Option 2: SpanNear2
  q = spans.SpanNear2([Term("content", "Hello"), Term("content", "world")], slop=5)
  results = s.search(q, limit=5)

© www.soinside.com 2019 - 2024. All rights reserved.