标记同义词是许多站点中流行的重要功能(例如,在StackExchange上使用),而分类法同义词曾经是Drupal 6核心分类法模块的一部分,后来被放弃使用“ Roll your own”自定义同义词系统使用Field API。
当同义词可靠地工作时,它们在搜索中非常有用。例如,确保搜索“ America”会找到标记为“ USA”的内容,等等。但是,在使用流行的Search API - Facet API时,我找不到任何实现此功能的标准方法的线索系列相关的集成搜索模块,用于节点搜索。
当使用这样的模块集群时,“顺其自然”很重要,以确保您实现的系统不会违背社区和模块维护者的思想。当它们确实与谷物背道而驰时,它们就会变得易燃,并有可能因将来对这些模块的更改而损坏。
在D7中使用Search API为网站实施分类法同义词的可靠/可靠/标准/预期方法是什么?(特别是使用Search API Solr,但我希望Search API尝试抽象出特定搜索提供程序的尝试在这种情况下会起作用)。
如果您有一个可以正常运行的系统,但是您已经确定了这一点,并且不确定是否确实存在(在Drupal中很常见),请无论如何都要与您的信息共享测试,使用和使用Search API-Facet API家族中哪些功能和模块不起作用的经验。
我在研究中发现了一些合理但潜在的胡言乱语的选择:
- 有一个D7 搜索同义词模块,但看起来用得很少,也没有任何确认,它可以或将继续与Search API之类的第三方搜索模块一起使用(该模块是在Drupal核心搜索的基础上设计的)。编辑: 一般而言,在D7中看起来也不是太可靠。
- 从理论上讲,可以在分类词汇表中添加一个称为“同义词”的术语参考字段,并以与节点本身上的术语同等的权重从Search API中的术语索引该字段。这将适用于文本搜索,但是感觉像是一个浅薄的MacGuyver-y风管磁带解决方案,而不是能够平稳地插入整个Search API系列的强大功能。例如,如果术语“英国”具有同义词“英国”,则在“英国”上进行搜索的人会获得带有United Kindgom标签的结果,但有人在自动完成的“分类法”暴露的过滤器中键入“英国”或选择具有分类法事实的英国不会看到带有“ United Kingdom”标签的任何内容。*****
- 另一种类似的可能性是在术语词汇表中添加一个多值纯文本字段“同义词”(我猜是逗号,或者用逗号分隔),并用与上述术语名称相同的权重对其进行索引。但这在上面的示例中具有与上述类似的问题,即使不是更糟糕,“ British”甚至不会在构面或暴露的滤镜中列为选项。可能有某种方法可以通过组合名称和同义词(“ United Kingdom(英国,英国)”)来创建复合字段,并设置构面/暴露的过滤器/等以使用该字段...但是我想不出任何方法要做到这一点,您不必担心骇人听闻,也不必担心会遇到麻烦。编辑: Search API Combined似乎是为这样设计的,但是我
- 然后是将所有内容填入术语名称的最后一种选择:应该清楚这是不希望的,并且在很多情况下会列出非常难看的列表(例如,想象一下像“北韩国(朝鲜民主主义人民共和国,朝鲜,朝鲜民主主义人民共和国)” ...)。或拥有一个显示简短版本的“显示名称”字段,并设置除搜索(所有视图,Pathauto,使用术语名称的所有其他contrib / core模块)之外的所有内容,以使用它代替术语名称...,非常hacky,非常反对粮食。
- Apache Solr具有同义词功能,该功能读取同义词的文本文件,并且在使用它的搜索中将这些术语视为同义词。但是,尽管在使用Solr的Search API设置中可能的情况下,模块维护者认为这是不受支持的“自行承担风险”高级Solr配置。同样,比起在分类法中专门使用的同义词,更适合于网站语言中的通用同义词。例如,一个分类法不能将英国,苏格兰等与英国区分开的网站可能希望在标记的上下文中将它们视为同义词,而在对正文进行搜索时则不希望它们成为同义词。编辑: 头Facet API维护者警告此路线 因为Solr集成模块使用术语作为TID而不是文本。
我知道这是一个有缺陷的示例,因为在英国/英国以及一般国家/地区,人们习惯于使用仅包含一个或另一个列表的列表。在许多不太简单的情况下(例如产品类别),人们不会想到寻找同义词。
更新:Drupal.org Facet API队列上新线程中的相关信息。也是Search API queue上的(当前未答复)线程。
(任何规则律师都想知道drupal.org支持请求是否可以,并且drupal回答有关同一主题的问题:是的,实际上是鼓励减轻模块维护人员的压力)