1

我有一个字符串字段,其值类似于PA2456UorPA23U-RB并且我想做部分匹配,以便我可以搜索PA24并获得第一个结果,或者搜索PA23U-RB并找到第二个结果(这将是一个完全匹配。

我尝试使用 ngram,但它忽略了数值,所以,如果我输入pa111它会返回任何以pa

有关示例,请参见此要点。

这可能是一个单独的问题,或相关的,但搜索12345001也应该匹配12345-001

谢谢

更新 我使用的最终分析器在这里:https ://gist.github.com/3803180

4

1 回答 1

2

根据您的要求制作 ngrams 看起来是一个不错的选择,但我认为edge_ngrams应该足够了。这样你的索引会增长一点点,因为你会索引更少的术语。无论如何,问题是您也不需要将相同的分析器应用于查询,否则查询pa111将意味着查询您可以从中得出的所有 ngram,这将导致您获得更多匹配项d 期望。

您只需要将您的 search_analyzer 更改为不生成 ngram 的分析器。您可以使用已有的相同并删除 ngram 令牌过滤器(仅适用于 search_analyzer,index_analyzer 很好)。

关于破折号问题,请查看Word delimiter token filter。您需要对其进行配置以使其按预期工作。我猜generate_number_parts=false,generate_word_parts=falsesplit_on_numerics=false选项应该让它按你的意愿工作。这样,破折号就不会被索引。您需要在索引时和查询时应用令牌过滤器。

于 2012-09-29T11:39:49.840 回答