【问题标题】:Match a query within token in Whoosh在 Whoosh 中匹配令牌内的查询
【发布时间】:2018-07-06 14:06:35
【问题描述】:

我想在文本上应用 Whoosh 搜索。现在这仅适用于标记的完全匹配(空格分隔)。我也想在一个令牌内匹配(例如:在一个令牌“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])

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

【问题讨论】:

    标签: python search match token whoosh


    【解决方案1】:

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

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

    [编辑开始]

    希望这会有所帮助:

    https://regexr.com/3s2ta

    以上是捕获 OP 描述的单词的第一个示例。但是,我注意到存在一个问题,即 Regex 示例还会捕获任何包含“add”的单词,包括 Addendum、Daddy 等。注意到这一点,我已经修改并重新分叉了 Regex 示例,链接如下:

    https://regexr.com/3sg8q

    [编辑完成]

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

    【讨论】:

    • 欢迎您,很高兴为您提供帮助 :)
    • @Bazenheftigkrass 请重新查看我的答案,因为原版中有一个小问题。道歉。
    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 2020-12-18
    • 2017-06-30
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多