我正在使用Elasticsearch在相当广泛的文档中进行搜索,但是在寻找处理带连字符的单词的最佳方法时遇到了麻烦。
在我的数据中,单词经常以连字符或复合词的形式出现,例如pre-eclampsia
和preeclampsia
。目前,搜索一个不会找到另一个(standard
标记化程序将连字符的版本索引为pre eclampsia
)。
通过去除字符过滤器中的连字符,可以轻松解决此特定情况。但是我经常想对连字符进行标记化:搜索jean claude
和happy go lucky
应该匹配jean-claude
和happy-go-lucky
。
解决此问题的一种方法是在应用程序层中,方法是将对hyphenated-word
的任何查询实质上转换为hyphenated-word OR hyphenatedword
。但是有什么方法可以处理搜索引擎中的所有这些用例,例如一些分析仪配置? (假设我的数据很大且变化很大,以至于我无法手动创建详尽的同义词文件。)
最佳答案
您可以使用compound word token filter-hyphenation_decompounder
应该足够不错。
看来您的索引包含许多 Realm 特定的单词,而这些单词不一定在常规的英语词典中,所以我会花一些时间首先用对您的 Realm 很重要的单词来创建自己的词典。这可以基于特定 Realm 的文献,分类法等。dictionary_decompounder
适合执行此类操作。
假设您的问题与Elasticsearch无关,而与Solr无关,后者的过滤器名为DictionaryCompoundWordTokenFilter。