我正在尝试解析具有文本加数字的查询。
示例:Apple iphone 6导致:
Results for And([Term('title', u'apple'), Term('title', u'iphone')])
而Apple iphone 62导致:
Results for And([Term('title', u'apple'), Term('title', u'iphone'), Term('title', u'62')])
为什么不接受单个数字?
答案 0 :(得分:0)
默认情况下,所有带单字符的单词都被视为Whoosh中的停用词并被忽略。这意味着忽略所有字母和数字。
停用词是在处理自然语言数据(文本)之前或之后过滤掉的词。 (ref)
您可以检查StopFilter
默认情况下minsize = 2
是否已添加到预定义的设置中。
class whoosh.analysis.StopFilter(
stoplist=frozenset(['and', 'is', 'it', 'an', 'as', 'at', 'have', 'in', 'yet', 'if', 'from', 'for', 'when', 'by', 'to', 'you', 'be', 'we', 'that', 'may', 'not', 'with', 'tbd', 'a', 'on', 'your', 'this', 'of', 'us', 'will', 'can', 'the', 'or', 'are']),
minsize=2,
maxsize=None,
renumber=True,
lang=None
)
因此,您可以通过重新定义架构并移除StopFilter
或将其与minsize = 1
一起使用来解决此问题:
from whoosh.analysis import StandardAnalyzer
schema = Schema(content=TEXT(analyzer=StandardAnalyzer(stoplist=None)))