如何在Whoosh查询中包含撇号(')?

2024-04-26 11:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在Whoosh查询中包含撇号(')?例如(这是):

tws_fileName.tws_query_index( 'that's' )

因为上面提到的查询不起作用,下面的查询也不起作用

tws_fileName.tws_query_index( "that's" )

Tags: indexthatfilenamequerytwswhoosh
1条回答
网友
1楼 · 发布于 2024-04-26 11:33:08

默认情况下不能这样做,因为所有标点都是由StandardAnalyzer中的RegexTokenizer从索引中剥离出来的。"that's all, folks!"被索引为[that,s,all,folks]

您可以通过以下两种方式来规避此问题:

  1. 使用KEYWORD而不是TEXT字段,因为它不使用RegexTokenizer,但您无法对关键字字段执行短语搜索。

  2. 使用带有StandardAnalyzer和自定义RegexTokenizer正则表达式的TEXT字段。在下面的示例中,修改后的正则表达式接受撇号作为标记的有效部分。

    from whoosh import fields, analysis

    myanalyzer = analysis.StandardAnalyzer(expression=r'[\w\']+(\.?\w+)*')
    schema = fields.Schema(myfield=fields.TEXT(analyzer=myanalyzer))

myfield中的任何撇号现在都将与标记一起保留:[that's, all, folks]。如果您以"that's"'that\'s'的形式提交查询,您将得到一个匹配项。但是,搜索"that"将无法再找到此文档,因为没有此类标记。你知道吗

相关问题 更多 >