我应该如何索引和搜索英文带连字符的单词?

时间:2018-05-11 16:46:13

标签: elasticsearch search solr lucene

我使用Elasticsearch搜索范围相当广泛的文档,而且我无法找到处理带连字符的单词的最佳做法。

在我的数据中,单词经常出现连字符或复合词,例如pre-eclampsiapreeclampsia。目前,搜索一个不会找到另一个(standard标记器将带连字符的版本索引为pre eclampsia)。

通过在字符过滤器中剥离连字符,可以轻松修复此特定情况。但通常我想对连字符进行标记:jean claudehappy go lucky的搜索应与jean-claudehappy-go-lucky匹配。

解决此问题的一种方法是在应用层,通过将hyphenated-word的任何查询转换为hyphenated-word OR hyphenatedword。但有没有办法在搜索引擎中处理所有这些用例,例如:有一些分析仪配置? (假设我的数据很大且变化很大,我无法手动创建详尽的同义词文件。)

1 个答案:

答案 0 :(得分:1)

您可以使用compound word token filter - hyphenation_decompounder应该可以正常工作。

您的索引似乎包含许多特定于域的字词,而这些字词并不一定在常规英语字典中,因此我花一些时间首先使用对您的域名重要的字词创建自己的字典。这可以基于特定领域的文献,分类法等。dictionary_decompounder适合做类似的事情。

这假设您的问题与Elasticsearch相关,而不是Solr,其中过滤器的名称为DictionaryCompoundWordTokenFilter