elasticsearch如何正确找到转义字符或保留字符?

时间:2018-08-13 16:14:31

标签: javascript typescript elasticsearch

鉴于我有一个字符串,例如“ message-ID:1394.00,这是Henry.Lin”, 我想使用elasticsearch查找所有包含“。”的短语或单词。在这种情况下,我要查找1394.00和Henry.Lin。但是,当我使用标准分析器索引我的文档时,它不起作用。我知道标准分析仪会逃脱这种特性。因此,我将分析器更改为ngram。不幸的是,它仍然无法正常工作。如果有人可以帮助我,那就太好了。

1 个答案:

答案 0 :(得分:0)

您可以为点添加自定义字符过滤器。替换为“。”与“点”。只需使用以下自定义映射即可:

"char_filter": {
"&_to_and": {
    "type":       "mapping",
    "mappings": [ ".=>dot"]
}}

请检查此documentation以获得更多详细信息。

现在,为什么ngram无法正常工作?

问题是,您如何使用ngram-与其他分析器一起用作令牌生成器或令牌过滤器? min_gram,max_gram的大小是多少?检出此example可以清除两者之间的差异。

还要进一步了解您的数据如何在Elasticsearch中获取索引以及为什么不匹配查询-尝试使用termvectors API。

最后,出于以下原因,我不建议您使用ngram来解决此问题-1)n-gram将使您的索引变大,2)它们具有完全不同的use case