我配置了Solr 4.4.0核心,其中包含大约630k文档,原始大小约为10 GB . 为了查询和突出显示,每个字段都被复制到 text 字段 . 当我执行没有突出显示的搜索时,结果会返回约 100 milliseconds ,但是当启用突出显示时,同一查询需要 10-11 seconds . 我也注意到 subsequent 对相同术语的查询持续大约相同的10-11秒 .
我对该领域的初始配置如下
multiValued="true"
omitNorms="true"
termPositions="true"
termVectors="true"
termOffsets="true" />
发送的查询类似于以下内容
http://solrtest:8983/solr/Incidents/select?q=error+code&fl=id&wt=json&indent=true&hl=true&hl.useFastVectorHighlighter=true
我的所有研究似乎都没有提供为什么突出表现如此糟糕的线索 . 一时兴起,我决定查看 omitNorms=true 属性是否有效,我修改了 text 字段,清除了数据,并从头开始重新加载 .
multiValued="true"
termPositions="true"
termVectors="true"
termOffsets="true" />
奇怪的是,这似乎解决了问题 . 突出显示的初始查询占用 2-3 seconds ,后续查询小于 100 milliseconds .
但是,因为我们想要 omitNorms=true ,我的永久解决方案是拥有"text"字段的 two 副本,一个具有属性,另一个没有 . 这个想法是针对一个字段执行查询并突出显示另一个字段 . 所以现在架构看起来像
multiValued="true"
omitNorms="true"
termPositions="true"
termVectors="true"
termOffsets="true" />
multiValued="true"
termPositions="true"
termVectors="true"
termOffsets="true" />
查询如下
http://solrtest:8983/solr/Incidents/select?q=error+code&fl=id&wt=json&indent=true&hl=true&hl.fl=text2&hl.useFastVectorHighlighter=true
同样,数据被清除并重新加载相同的630k文档,但这次索引大小约为17 GB . (正如预期的那样,因为“text”字段中的内容是重复的 . )
问题是性能数字恢复到每次运行的最初10-11秒 . 无论是第一次删除omitNorms都是侥幸还是还有其他事情正在发生 . 我不知道是什么......
使用jVisualVM捕获CPU示例显示使用大多数CPU的以下两种方法
org.apache.lucene.search.vectorhighlight.FieldPhraseList.() 8202 ms (72.6%)
org.eclipse.jetty.util.BlockingArrayQueue.poll() 1902 ms (16.8%)
我看到init方法低至54%,民意测验数高达30% .
有任何想法吗?我可以寻找任何其他地方来追踪瓶颈?
谢谢
Update
我用相同的数据集但不同的配置做了一堆测试,这是我发现的......虽然我不明白我的发现 .
快速突出显示性能需要 omitNorms not be set to true . (不知道omitNorms和突出显示有什么关系 . )
但是,如果对 same 字段执行查询和突出显示(即df = hl.fl),这似乎只是真的 . (再次,不知道为什么......)
然而,另一个,只有在模式中存在的默认 text 字段完成时 .
这是我测试的方式 - >
测试反对约525,000份文件
几乎所有字段都被复制到多值 text 字段
在某些测试中,几乎所有字段都被 also 复制到发送多值 text2 字段(此字段与 text 相同,但它具有相反的 omitNorms 设置
每次更改配置时,Solr实例都已停止,数据文件夹已删除,实例已重新启动
我找到了什么 - >
当仅使用 text 字段且 omitNorms = true 为 present 时,性能不佳(响应时间为10秒)
当仅使用 text 字段且 omitNorms = true 为 not present 时,性能很好(亚秒级响应时间)
当 text 确实 not 和 omitNorms = true 确实如此时,对于 text 突出显示的查询在亚秒内返回, all other 组合导致10-30秒的响应时间 .
text 确实 omitNorms = true 和 text2 确实 not , all 查询组合,突出显示在7-10秒内返回 .
我很困惑....