【问题标题】:Can we use 2 Denormalizer one for read and the other for elasticsearch我们可以使用 2 Denormalizer 一个用于读取,另一个用于弹性搜索吗
【发布时间】:2019-11-30 17:14:58
【问题描述】:

我可以使用 2 Denormalizer:

我的网络应用程序“读取”的第一个 DN

搜索引擎的第二个 DN

或者

一个 DN 用于读取和搜索我的 Web 应用程序

【问题讨论】:

  • 不确定你的意思。你的意思是用不同的方式处理一个字段的内容?一旦针对全文搜索进行了优化,又针对显示和/或排序目的进行了优化?请完善您的问题。
  • 是的,这正是我的意思 DN1 为全文搜索优化,DN2 用于显示和/或排序目的

标签: elasticsearch cqrs


【解决方案1】:

简短回答:是的

您应该只将一个命令绑定到一个命令处理程序,但您可以而且经常会为每个事件设置多个事件处理程序/denomamalisers。

【讨论】:

    【解决方案2】:

    根据您的字段映射,Elasticsearch 会在将您的字符串存储到字段室内索引之前对其进行预处理。

    如果您想使用一个字段进行全文搜索,您需要将其映射到一个类型为text 的字段。这样,在将字符串写入索引时,Standard Analyzer 将处理您的字符串(除非您为该字段指定不同的分析器)。

    另一方面,如果您想将您的字段主要用于排序、精确过滤或对其运行分析(例如,有多少不同的值、什么是最小值和最大值、前 10 个值是什么等)您需要将 int 映射到 keyword 类型的字段,以确保在写入索引时字符串保持原样。但请注意,仅用于显示原始字符串,您不需要将其存储为 keyword-field,因为 Elasticsearch 在其 source-field 中已经有原始字符串的副本。

    好消息:您不需要选择其中一个,Elasticsearch 允许您使用所谓的multi-fields 以多种方式存储您发送给它的字段。这也是字符串的默认实现(因为 Elasticsearch 不知道您将使用字符串字段做什么)。

    my_field 的示例映射

    PUT my_index
    {
      "mappings": {
        "properties": {
          "my_field": {
            "type": "text",
            "fields": {
              "keyword": { 
                "type":  "keyword"
              }
            }
          }
        }
      }
    }
    

    (来源:Elasticsearch reference: Multi-Fields

    引用 my_field

    • 在字段中显示或搜索时,只需通过my_field 引用即可。
    • 对于完全匹配查询、排序或分析/聚合目的,请将该字段称为my_field.keyword

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      相关资源
      最近更新 更多