引子

问题一:明明索引库中文档内容上千字,为什么ES搜索出来的结果字数总是那么少?

问题二:
我们索引库中的文档内容是非常多的,但是我们会发现搜索出来的结果仅仅只有一两百字,恰好这个结果里边有关键字,而不是文档内容从前往后截取了一二百字。
ES中为什么搜索出来的结果,高亮字段优先展示,而不是文档内容从前往后截取几百个字符串显示?

看完下边三个方法介绍你就明白了。

在我们高亮时使用了HighlightBuilder,创建的过程中,有三个默认值。

es高亮显示全部字段 es高亮显示不全_高亮

fragmentSize

高亮字段内容长度,去除html样式标签,统计字数,默认为100。

numOfFragment

高亮关键字数量,优先显示,当numOfFragment设置为0时,fragmentSize失效,会返回全部内容。默认为5。

实例测试:

为0时,内容全部显示出来。
为1时,显示正常,字段长度低。
为5时,显示正常,字段长度高。

问题:

有的同志发现自己es搜索出来的结果为什么不全,少了很多内容,比如文档本来只有80个字,按理说应该全部显示出来的,但是为什么没有显示出来?

解决:

因为numOfFragment这个方法,有的人建议你将参数设置为0,但是注意上边我写了,为0时,fragmentSize失效,全部内容返回,有问题的。
如果你非常了解这三个方法,那么怎么解决这个问题,一目了然,设置fragmentSize长度为200即可。

问题:

numOfFragment两个参数,好像有点关联,具体是怎么回事?

解决:

作用效果,numOfFragment>fragmentSize。
意思就是,如果你numOfFragment设置了5,fragmentSize设置了50,搜索结果绝对不止50个字。
但是在numOfFragment为5,时,fragmentSize设置200,300是可以的,控制长度是可以做到的。所以说这个fragmentSize这个方法还是有用的。

两个方法相辅相成,HightLightBuilder默认一个5一个100,是有一定道理的,具体业务上,你想怎么展示,自己测试,找一个比较合适的参数大小。

noMatchSize

两个字段参与高亮索引,一个字段匹配到了,另一个字段没有匹配到,那么显示多少文字呢,就是这个方法的作用。未匹配到情况下,字段长度。

实例:
我有两个索引字段,一个文件名,一个文件内容,文件名称匹配到了,文件内容没有匹配到,我给noMatchSize(50),传参50,文件内容就是50个字。