在Whoosh中匹配令牌内的查询

时间:2018-07-06 14:06:36

标签: python search match token whoosh

我想用Whoosh对文本进行搜索。现在,这仅适用于令牌的完全匹配(以空格分隔)。我也想在令牌中进行匹配(例如:在令牌“ 已添加”中匹配添加)。我知道词干和变异,但这不是我想要的。谢谢您的帮助!

from whoosh.index import create_in
from whoosh.fields import Schema, TEXT, KEYWORD, ID, STORED
from whoosh.qparser import QueryParser

schema = Schema(title=TEXT(), content=TEXT())
indexpath = (r"C:\Users\rettenma\.jupyter\JupyterWork"+
        r"folder\Python_Repository\bin\index")
ix = create_in(indexpath, schema)
writer = ix.writer()
writer.add_document(title=u"First document",
                content=u"This is the first document we've added!")
writer.commit()

with ix.searcher() as searcher:
    query = QueryParser("content", ix.schema).parse("add")
    results = searcher.search(query, terms=True)
    print(results[0])

由于结果为空,这将引发错误。

1 个答案:

答案 0 :(得分:0)

http://whoosh.readthedocs.io/en/latest/api/query.html#whoosh.query.Regex

听起来像您需要正则表达式。

[编辑开始]

希望这会有所帮助:

https://regexr.com/3s2ta

以上是捕获OP描述的单词的第一个示例。但是,我注意到存在一个问题,即正则表达式示例还将捕获任何包含“ add”的单词,包括附录,Daddy等。注意到这一点后,我修改并重新分支了Regex示例,链接在下面:

https://regexr.com/3sg8q

[编辑完成]

这是一个经过额外测试的示例,以确保您可以捕获单词“ add”的所有变体,例如“添加” /“添加” /“添加” /“附加”。本质上,任何包含“加”和单词其余部分的内容。