2024-04-26 11:33:08 发布
网友
如何在Whoosh查询中包含撇号(')?例如(这是):
tws_fileName.tws_query_index( 'that's' )
因为上面提到的查询不起作用,下面的查询也不起作用
tws_fileName.tws_query_index( "that's" )
默认情况下不能这样做,因为所有标点都是由StandardAnalyzer中的RegexTokenizer从索引中剥离出来的。"that's all, folks!"被索引为[that,s,all,folks]
StandardAnalyzer
RegexTokenizer
"that's all, folks!"
[that,s,all,folks]
您可以通过以下两种方式来规避此问题:
使用KEYWORD而不是TEXT字段,因为它不使用RegexTokenizer,但您无法对关键字字段执行短语搜索。
KEYWORD
TEXT
使用带有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"将无法再找到此文档,因为没有此类标记。你知道吗
myfield
[that's, all, folks]
"that's"
'that\'s'
"that"
默认情况下不能这样做,因为所有标点都是由
StandardAnalyzer
中的RegexTokenizer
从索引中剥离出来的。"that's all, folks!"
被索引为[that,s,all,folks]
您可以通过以下两种方式来规避此问题:
使用
KEYWORD
而不是TEXT
字段,因为它不使用RegexTokenizer
,但您无法对关键字字段执行短语搜索。使用带有
StandardAnalyzer
和自定义RegexTokenizer
正则表达式的TEXT
字段。在下面的示例中,修改后的正则表达式接受撇号作为标记的有效部分。myfield
中的任何撇号现在都将与标记一起保留:[that's, all, folks]
。如果您以"that's"
或'that\'s'
的形式提交查询,您将得到一个匹配项。但是,搜索"that"
将无法再找到此文档,因为没有此类标记。你知道吗相关问题 更多 >
编程相关推荐