【发布时间】:2016-01-02 14:56:41
【问题描述】:
在 Elasticsearch 中搜索 iphone 时努力使 iPhone 匹配。
由于我有一些源代码处于危险之中,我当然需要CamelCase tokenizer,但它似乎将 iPhone 分成了两个词,所以找不到 iphone。
任何人都知道添加例外以将 camelCase 单词分解为标记(camel + case)的方法吗?
更新:为了清楚起见,我希望将 NullPointerException 标记为 [null, pointer, exception],但我不希望 iPhone 成为 [i, phone]。
还有其他解决方案吗?
更新 2:@ChintanShah 的回答提出了一种不同的方法,可以为我们提供更多信息 - NullPointerException 将被标记为 [null, pointer, exception, nullpointer, pointerexception, nullpointerexception],从以下角度来看,这肯定更有用搜索的那个。而且索引也更快!付出的代价是索引大小,但它是一种优越的解决方案。
【问题讨论】:
-
什么不使用小写过滤器?它会将所有单词小写
-
@ChintanShah25 这对修复分词器有何帮助? (顺便说一句 - 我使用小写过滤器)
-
分词器与过滤器不同。 iPhone 将被索引为带有小写过滤器的 iphone。如果您发布当前的分析器和映射会有所帮助
-
除非我完全弄错了,tokenizer 在过滤器之前起作用,所以骆驼大小写将 iPhone 切碎为 [i, Phone],小写只是将它变成 [i, phone]
-
你不能有驼色外壳,也不能同时打破“iPhone”。 Elasticsearch 无法确定何时使用驼峰式套管,何时不使用。你必须想出这些规则。除了“iPhone”之外,可能还有其他您不想损坏的令牌,或者是否存在?