elasticsearch - 始终具有和不具有空格的Elasticsearch索引测量单位

标签 elasticsearch

因此,无论数字和单位之间是否存在空格,我都希望始终为度量单位编制索引。
我使用pattern_capture过滤器完成了此操作:

GET /_analyze
{
  "char_filter": [
    {
      "pattern": "(\\d+)\\s*(cm|m|in)",
      "type": "pattern_replace",
      "replacement": "$1_$2"
    }
  ],
  "text": ["10cm", "10 cm"]
}
哪个产生我的期望:
{
  "tokens" : [
    {
      "token" : "10_cm",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "10_cm",
      "start_offset" : 5,
      "end_offset" : 10,
      "type" : "word",
      "position" : 101
    }
  ]
}
虽然这可行,但我不确定模式捕获性能。 Elasticsearch文档中到处都有Regex警告,我有点担心它会严重影响性能。
也许有更好的方法可以更一致地分析此类单位?

最佳答案

您应该在Elasticsearch中谨慎对待性能和正则表达式。
您可以在摄取时使用简单的正则表达式。但这取决于您的实现。
主要风险是在索引过程循环内引入另一个或几个其他循环。
因此,在大文本字段上这非常危险。
但是它不应该在您的用例上保持不变。
首先,您应该标记正则表达式以避免循环,即使用户发送了错误的数据(10cm 20cm 14cm等...。而不是字段中的一个值都可能有问题),如果在用例中可能的话,请添加^正则表达式

GET /_analyze
{
  "char_filter": [
    {
      "pattern": "^(\\d+)\\s*(cm|m|in)$",
      "type": "pattern_replace",
      "replacement": "$1_$2"
    }
  ],
  "text": ["10cm", "10 cm", "a10cm", "10 cm3"]
}
最后2个示例将被忽略。
{
  "tokens" : [
    {
      "token" : "10_cm",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "10_cm",
      "start_offset" : 5,
      "end_offset" : 10,
      "type" : "word",
      "position" : 101
    },
    {
      "token" : "a10cm",
      "start_offset" : 11,
      "end_offset" : 16,
      "type" : "word",
      "position" : 202
    },
    {
      "token" : "10 cm3",
      "start_offset" : 17,
      "end_offset" : 23,
      "type" : "word",
      "position" : 303
    }
  ]
}
但是,真正衡量集群中此更改影响的唯一方法是对其进行测试。
您可以创建自己的基准,也可以使用Rally并定义一个Race以测试大量数据。

关于elasticsearch - 始终具有和不具有空格的Elasticsearch索引测量单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63951009/

相关文章:

javascript - 处理 ElasticSearch 中的对象 - 我需要重建它吗?

elasticsearch - 使用ElasticSearch进行Smartcase搜索/突出显示

elasticsearch - 如何调整match_all查询?

search - 如何在ElasticSearch和Apache Solr中使用某些关键字将搜索结果列入黑名单/将其删除?

Elasticsearch:获取索引列表

lucene - ElasticSearch:根据字段长度过滤文档?

apache-spark - pyspark-结构化流到 Elasticsearch

elasticsearch - elasticsearch将嵌套对象的元素重新索引为关键字

php - 如何将 MySQL 搜索条件转换为 Elasticsearch 查询

elasticsearch - 一个 elasticsearch/logstash 实例具有多个具有唯一索引的应用程序