搜索和索引与嗖连字符的单词

问题描述 投票:5回答:1

我使用嗖索引和搜索大量的文档,而且许多我需要寻找的东西是复姓。嗖似乎把连字符作为某种类型的特殊字符,但对我的生活我无法弄清楚它的行为。

任何人都可以提供建议如何对待嗖连字符,而索引和搜索?

python whoosh
1个回答
1
投票

嗖简单地将所有标点符号的空间。假设默认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的等价物。

你也可以强制嗖接受连字符单词的一部分。您可以通过覆盖在RegexTokenizerStandardAnalyzer表达与接受连字符作为标记的有效部分正则表达式做到这一点。

    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,因为这现在已经成为一个象征。由于这种副作用的,除非你的内容在其使用连字符真正原子连字符的单词的严格限制,我会建议短语的方法。

© www.soinside.com 2019 - 2024. All rights reserved.