【发布时间】: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+) 吗?让我们试试吧,因为你的内容看起来很长
标签: performance lucene elasticsearch highlighting