Whoosh 近距离搜索
Whoosh Proxmity search
我想知道,如何使用 Whoosh 进行邻近搜索。我已经阅读了 whoosh 的文档。文档中写到使用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))
大佬们,请教一下如何使用class whoosh.query.Phrase(fieldname, words, slop=1, boost=1.0, char_ranges=None)'使用邻近搜索并改变单词之间的距离。
提前致谢
你想要的是 slop 系数 5。
几点:
搜索时,必须传递查询(q)
,而不是查询解析器(qp)
:results = s.search(q, limit=5)
limit
是指最大文件数到return,不是slop因子。您的 limit=5
参数表示您希望返回最多 5 个搜索结果(以防您认为这是废话)。
你可以去掉termclass=Phrase
您可以通过两种方式构建短语查询:
- 使用查询字符串。适合传递用户查询。将
~
和溢出因子附加到邻近搜索的短语中。如果您希望短语术语最多相隔 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)
我想知道,如何使用 Whoosh 进行邻近搜索。我已经阅读了 whoosh 的文档。文档中写到使用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))
大佬们,请教一下如何使用class whoosh.query.Phrase(fieldname, words, slop=1, boost=1.0, char_ranges=None)'使用邻近搜索并改变单词之间的距离。 提前致谢
你想要的是 slop 系数 5。
几点:
搜索时,必须传递查询
(q)
,而不是查询解析器(qp)
:results = s.search(q, limit=5)
limit
是指最大文件数到return,不是slop因子。您的limit=5
参数表示您希望返回最多 5 个搜索结果(以防您认为这是废话)。你可以去掉
termclass=Phrase
您可以通过两种方式构建短语查询:
- 使用查询字符串。适合传递用户查询。将
~
和溢出因子附加到邻近搜索的短语中。如果您希望短语术语最多相隔 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)