我想知道,如何使用邻近搜索与飞快移动。我已经阅读了飞快移动的文档。在文档中写道,通过使用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)'来使用邻近搜索并改变单词之间的距离。提前致谢
你想要的是一个5的slop因子。
几点:
(q)
,而不是查询解析器(qp)
:results = s.search(q, limit=5)
limit
指的是要返回的最大文档数,而不是slop因子。您的limit=5
参数表示您想要获得最多5个搜索结果(如果您认为这是slop)。termclass=Phrase
您可以通过两种方式构建短语查询:
~
和slop因子附加到邻近搜索的短语。如果您希望短语术语最多相隔5个字:"hello world"~5
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)