如何在Whoosh查询中包括撇号(')?例如(就是):
tws_fileName.tws_query_index( 'that's' )
因为上面提到的查询不起作用,所以下面的查询也不起作用
tws_fileName.tws_query_index( "that's" )
答案 0 :(得分:1)
默认情况下您无法执行此操作,因为所有标点符号都由RegexTokenizer
中的StandardAnalyzer
从索引中删除。"that's all, folks!"
的索引为[that,s,all,folks]
您可以通过以下方式规避此问题:
使用KEYWORD
而不是TEXT
字段,因为它不使用RegexTokenizer
,但是您将无法在关键字字段上进行词组搜索
使用带有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"
将不再找到此文档,因为没有这样的标记。