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

时间:2019-01-07 23:47:07

标签: python python-3.x whoosh

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

tws_fileName.tws_query_index( 'that's' )

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

tws_fileName.tws_query_index( "that's" )

1 个答案:

答案 0 :(得分:1)

默认情况下您无法执行此操作,因为所有标点符号都由RegexTokenizer中的StandardAnalyzer从索引中删除。"that's all, folks!"的索引为[that,s,all,folks]

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

  1. 使用KEYWORD而不是TEXT字段,因为它不使用RegexTokenizer,但是您将无法在关键字字段上进行词组搜索

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

    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"将不再找到此文档,因为没有这样的标记。