【问题标题】:In elasticSearch, not able to search name with special character '-'在 elasticSearch 中,无法使用特殊字符“-”搜索名称
【发布时间】:2014-04-25 06:03:19
【问题描述】:

我正在尝试在弹性搜索中搜索名称,

将名称视为 kanal-kannan

通常我们用* na搜索名字,我试着这样搜索-

"/index/party_details/_search?size=200&from=0&q=(first_name_v:kanal-*)"

这会导致零记录。

【问题讨论】:

标签: elasticsearch


【解决方案1】:

- 是一个特殊字符,需要转义才能进行字面搜索:\-

如果您使用q 参数(即query_string 查询),则适用Lucene Queryparser Syntax 的规则。

根据您的分析器链,您的索引中可能没有任何 - 字符,在这种情况下也可以在查询中用空格替换它们。

【讨论】:

    【解决方案2】:

    除非分析器专门处理了连字符,否则您的示例中的两个单词kanalkannan 将分别编入索引,因为默认情况下任何非字母字符都被视为单词分隔符。

    查看Word Delimiter Token Filter 的文档,特别是type_table 参数。

    这是我用来确保正确索引电子邮件字段的示例

    ft.custom_delimiter = {
        "type": "word_delimiter",
        "split_on_numerics": false,
        "type_table": ["@ => ALPHANUM", ". => ALPHANUM", "- => ALPHA", "_ => ALPHANUM"]
    };
    

    【讨论】:

    • 非常感谢您的回复..但我仍然面临这个问题..请提供任何其他想法..
    【解决方案3】:

    @l4rd 的答案应该可以正常工作(我有相同的设置)。您拥有的另一个选择是使用关键字分析器标记字段以完全防止标记化。请注意,关键字标记器不会小写任何内容,因此在这种情况下,请使用带有关键字标记器的自定义分析器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      相关资源
      最近更新 更多