【问题标题】:Disabling Elasticsearch search analyzer禁用 Elasticsearch 搜索分析器
【发布时间】:2019-11-10 00:13:00
【问题描述】:
  • 我正在开发 elasticsearch 7.2 版,我在
    提高 ES 调用性能的过程
    申请。
  • 根据我的阅读,如果我们还没有设置“搜索分析器”,通过 将设置默认标准分析器。
  • 但是在不需要分析仪的情况下,有一个分析仪 可能会影响性能。是否将所有字段都作为“关键字” 防止这种情况发生?
  • 或者有没有其他方法可以禁用这个“搜索分析器”

附: 对于任何答案,如果您可以将我指向答案所基于的 ES 官方文档,我将不胜感激。

【问题讨论】:

    标签: elasticsearch match elk elasticsearch-analyzers term-query


    【解决方案1】:

    搜索分析器出现在各种场景中。

    查询类型:- 有些查询被分析,有些则不被分析。像match query 这样分析的查询对索引映射中定义的字段使用相同的分析器,而像term query 这样的查询不使用任何搜索时间分析器。阅读elasticsearch match vs term query

    还有来自官方 ES 文档的 sn-p

    匹配查询是布尔类型。这意味着提供的文本是 分析,分析过程从 提供文本。

    字段类型

    Text fields 默认被分析,标准分析器是它们的默认分析器,因此如果你没有为索引映射中的文本字段定义分析器然后进行匹配查询,它将使用standard 分析器但如果您使用 term 查询,则不会使用搜索时间分析器。

    keyword 字段,那么它将使用关键字分析器,它是无操作分析器,因此对于关键字字段的匹配查询,它将使用关键字分析器,但本质上就像不应用搜索时间分析器。

    如果您使用匹配查询或任何其他使用搜索时间分析器的分析查询,那么您可以将搜索时间分析器明确提及为keyword analyzer,正如我所解释的那样,它是一个无操作分析器,因此生成令牌的过程将非常有效。

    【讨论】:

    • @Asiri 我想补充一点,尽管只有在没有全文搜索用例的情况下禁用分析器才能帮助您提高性能。如果有或在不久的将来你觉得会有全文搜索的用例,那么你可能无法实现它。
    • 我正在使用匹配查询(实际上我希望它们是过滤上下文中的术语查询,但存储库中的弹簧弹性搜索数据 findByParameter1AndParameter2 似乎在查询上下文中使用匹配查询)但我索引中的所有字段是关键字。因此,根据您的解释,这意味着当我进行 ES 调用时没有发生搜索分析器。
    • @NishantSaini 我正在为所有字段使用关键字。所以似乎我不需要明确指定禁用分析器或将查询类型更改为术语。我对吗?在我的情况下,对 ES 的调用就“搜索分析器”而言已经很高效了?
    • @AsiriLiyanaArachchi,如果您使用关键字字段,那么即使您使用匹配查询,也不会经历昂贵的分析过程elastic.co/guide/en/elasticsearch/reference/current/…,是的,在这种情况下,您不必明确定义搜索分析器,它已经很高效了
    • @AsiriLiyanaArachchi,是的,但请考虑 Nishant 在文本字段的情况下给出的观点,因为更改分析器是一项重大更改,需要重新索引。
    猜你喜欢
    • 2014-02-15
    • 2023-03-25
    • 2014-02-25
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多