我使用Elasticsearch搜索范围相当广泛的文档,而且我无法找到处理带连字符的单词的最佳做法。
在我的数据中,单词经常出现连字符或复合词,例如pre-eclampsia
和preeclampsia
。目前,搜索一个不会找到另一个(standard
标记器将带连字符的版本索引为pre eclampsia
)。
通过在字符过滤器中剥离连字符,可以轻松修复此特定情况。但通常我想对连字符进行标记:jean claude
和happy go lucky
的搜索应与jean-claude
和happy-go-lucky
匹配。
解决此问题的一种方法是在应用层,通过将hyphenated-word
的任何查询转换为hyphenated-word OR hyphenatedword
。但有没有办法在搜索引擎中处理所有这些用例,例如:有一些分析仪配置? (假设我的数据很大且变化很大,我无法手动创建详尽的同义词文件。)
答案 0 :(得分:1)
您可以使用compound word token filter - hyphenation_decompounder
应该可以正常工作。
您的索引似乎包含许多特定于域的字词,而这些字词并不一定在常规英语字典中,因此我花一些时间首先使用对您的域名重要的字词创建自己的字典。这可以基于特定领域的文献,分类法等。dictionary_decompounder
适合做类似的事情。
这假设您的问题与Elasticsearch相关,而不是Solr,其中过滤器的名称为DictionaryCompoundWordTokenFilter。