ElasticSearch 和突出显示性能 - 普通与快速矢量荧光笔

Posted

技术标签:

【中文标题】ElasticSearch 和突出显示性能 - 普通与快速矢量荧光笔【英文标题】:ElasticSearch and highlighting performance - plain vs. fast vector highlighter 【发布时间】:2014-09-17 17:27:46 【问题描述】:

在运行同时使用 slop 和事实向量荧光笔的查询时,我遇到了性能问题。有趣的是,当使用普通荧光笔执行相同的查询时,性能问题就消失了,我不知道为什么会这样。

这是正在搜索的字段的元数据:

contents: 
   store: true
   search_analyzer: mySearchAnalyzer
   term_vector: with_positions_offsets
   type: string

以下使用事实向量荧光笔的查询需要 60 多秒:


  "size": 500,
  "query": 
    "query_string": 
      "query": "\"CATERPILLAR FINANCIAL SERVICES ASIA PTE LTD\"~5",
      "fields": [
        "contents"
      ],
      "default_operator": "and",
    
  ,
  "highlight": 
    "fields": 
      "contents": 
    
  

但是,如果我将查询更改为使用普通分析器,则只需几毫秒:


  "size": 500,
  "query": 
    "query_string": 
      "query": "\"CATERPILLAR FINANCIAL SERVICES ASIA PTE LTD\"~5",
      "fields": [
        "contents"
      ],
      "default_operator": "and",
    
  ,
  "highlight": 
    "fields": 
      "contents": "type" : "plain"
    
  

我查看了荧光笔的不同选项(如 fragment_size、fragment_offset、phrase_limit),但没有什么可以立即明显地提高性能。

对这里发生的事情有任何想法吗?或者我可以尝试哪些类型的设置来提高性能?

注意:我们从普通的向量荧光笔切换到事实向量荧光笔的一个原因是一些查询在使用普通荧光笔时失败。

编辑:我在以下链接中添加了演示问题的重现步骤: https://drive.google.com/file/d/0B-IfDOojIDnIQmpkY2RNN2pMREE/edit?usp=sharing

我认为关键是有一个字段包含许多相似的值(例如,在这种情况下,Caterpillar 被多次引用)。

【问题讨论】:

我使用 with_positions_offsets 记录了大约 20M 条记录,到目前为止没有问题。它甚至比plain 还要快。您可以发布content 的平均记录数和平均长度吗?还有mySearchAnalyzer的定义。如果您编写一个完整的 bash 脚本来创建索引/输入一些记录/查询并将其放在要点上以便于分析,那就太好了。 这是个好主意。我在这里添加了复制步骤:drive.google.com/file/d/0B-IfDOojIDnIQmpkY2RNN2pMREE/…。请注意,只需少量数据即可重现问题。 抱歉,忙于公司项目。现在只是有一些空闲时间回来。我重新创建了索引并且无法重现该问题,也许 b.c 数据还不够。顺便说一句,您尝试过postings highlighter (0.90.6+) 吗?让我们试试吧,因为你的内容看起来很长 【参考方案1】:

虽然不是严格的答案,但基于 Duc.Duong 的 cmets 无法重现该问题,我尝试使用我们正在使用的版本 (0.90.3) 和最新的 versopm (1.3.2) 重现此问题)。事实证明,最新版本不再重现 - 搜索立即返回。

因此,最重要的是,此问题不会在最新版本中重现。不确定在哪里修复,但问题出现在 0.90.3 中。

【讨论】:

以上是关于ElasticSearch 和突出显示性能 - 普通与快速矢量荧光笔的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 没有突出显示所有匹配项

使用 Elasticsearch,我可以为不同的匹配标记使用不同的 HTML 标签突出显示吗?

Elasticsearch 父子映射:同时搜索并突出显示

Elasticsearch 荧光笔误报

如何使用 Elasticsearch 存储和检索系统性能

使用SkyWalking+elasticsearch实现全链路监控