我使用嗖索引和搜索大量的文档,而且许多我需要寻找的东西是复姓。嗖似乎把连字符作为某种类型的特殊字符,但对我的生活我无法弄清楚它的行为。
任何人都可以提供建议如何对待嗖连字符,而索引和搜索?
嗖简单地将所有标点符号的空间。假设默认AND
搜索,查询dual-scale thermometer
相当于dual AND scale AND thermometer
。这将查找包含dual-scale digital thermometer
一个文件,但它也将找到dual purpose bathroom scale with thermometer
。
一个解决方案,以避免这种情况是把查询中的连字符的单词分成短语:"dual-scale" thermometer
,这是"dual scale" AND thermometer
的等价物。
你也可以强制嗖接受连字符单词的一部分。您可以通过覆盖在RegexTokenizer
的StandardAnalyzer
表达与接受连字符作为标记的有效部分正则表达式做到这一点。
from whoosh import fields, analysis
myanalyzer = analysis.StandardAnalyzer(expression=r'[\w-]+(\.?\w+)*')
schema = fields.Schema(myfield=fields.TEXT(analyzer=myanalyzer))
现在对于dual-scale thermometer
搜索相当于dual-scale AND thermometer
和会发现dual-scale digital thermometer
但不"dual purpose bathroom scale with thermometer"
。
但是,您将无法独立搜索连字符的单词。如果您的文档包含high-quality components
,你不会,如果你搜索quality
与之匹敌;只有high-quality
,因为这现在已经成为一个象征。由于这种副作用的,除非你的内容在其使用连字符真正原子连字符的单词的严格限制,我会建议短语的方法。