在索引搜索引擎时合并令牌是否合理?

Is it reasonable to merge tokens when indexing a search engine?

我正在使用 AWS CloudSearch 开发搜索引擎(尽管我认为我的问题通常与搜索引擎相关)。假设我有一个要编制索引的文档,其中有一个名为 Name 的文本字段,其值为 Somecompany。目前,如果我 运行 查询如 Somecompany,那么我当然会在结果中得到该文档。

但是,如果我 运行 查询 Some company,那么我不会得到相同的结果。我对搜索引擎和倒排索引有一些基本的了解。我知道我没有在结果中获取文档的原因是因为搜索引擎索引 将文档映射到标记 Somecompany。标记 Some 和标记 company 的索引中可能有单独的文档映射,但不管我的文档是否映射到它们中的任何一个(我不希望它是)。

是否有可能 and/or 索引搜索引擎是一种使 Some company 搜索查询找到我正在寻找的 Somecompany 文档的实用方法?

我也希望相反的情况有效。因此,如果文档是使用文本字段 Some company 编制索引的,那么我希望查询 Somecompany 能够找到该文档。

我一直在想一个解决方案,但我怀疑它可能违背倒排索引的原则并且效率很低。如果我用一个包含压缩的 Name 值的附加字段索引我的所有文档(删除字母和数字以外的每个字符),然后进行预处理每个查询都以相同的方式压缩值,然后它应该可以工作(我所有的查询都是前缀搜索)。

我对这个解决方案的担心是倒排索引将填充仅映射到单个文档的唯一标记。那是问题吗?有替代解决方案吗?

我相信您提出的压缩查询解决方案从搜索性能的角度来看会很好地工作,您完全不必担心索引唯一术语的问题。我看到的主要缺点是失去了搜索引擎的很多好处,比如词干提取、停用词和同义词,但如果你处理的公司名称本质上是专有名词,那么这不是什么大问题。它可能会给用户正确拼写他们的查询带来更大的负担(因为输入 "sime company" 会匹配 "some company" 中的一个词,而 "simecompany" 不匹配 "somecompany" 等),但您可以使用 fuzzy search (the ~ operator) and using a suggester.

来改善这一点

不过,我会小心谨慎,不要让奇怪的数据集格式影响您使用搜索的方式。如果可行,您可能需要考虑将这些名称分解回标记。将字符串分解为字典单词相当简单,但您的字典需要包含这些公司名称才能真正有效。我不愿意建议手动解决方案,但如果您只处理几千个,它可能是长 运行 中的最佳选择。