在 Whoosh 中匹配令牌内的查询

Match a query within token in Whoosh

我想使用 Whoosh 对文本进行搜索。现在这仅适用于完全匹配的标记(space 分隔)。我也想在标记内进行匹配(例如:在标记“added”中匹配 add)。我知道词干和变体,但这不是我要找的。感谢您的帮助!

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])

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

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

听起来你需要正则表达式。

[编辑开始]

希望这对您有所帮助:

https://regexr.com/3s2ta

以上是第一个捕获OP描述的单词的例子。但是,我注意到存在一个问题,因为 Regex 示例还会捕获任何包含 "add" 的单词,包括 Addendum、Daddy 等。注意到这一点后,我修改并重新分叉了正则表达式示例,link 如下:

https://regexr.com/3sg8q

[编辑完成]

这是一个额外测试的示例,以确保您可以捕捉到单词 "add" 的所有变体,例如"add" / "adds" / "added" / "additional"。本质上,任何包含 "add" + 单词其余部分的内容。