Solr6.3.0 采用word1.3分词器 高亮显示异常

清风-蓝魔泪 发布于 2016/12/13 10:09
阅读 511
收藏 0

【DevOps必读】产品经理与程序员之间如何破局?>>>

@杨尚川 你好,想跟你请教个问题:

我在Solr6.3.0上采用word.1.3.jar作为分词器,相应的配置也都按github上的改了,分词没问题,但是高亮出现了很多偏差,在网上搜了很多方案,基本都是说分词器有问题。

并且确定是solr产生的高亮错位,不是内容有什么特殊HTML字符导致的错位

请问这到底是什么原因?该如何修复和调整?是1.3的bug吗?

参考资料:http://www.zihou.me/html/2009/04/16/314.html

加载中
1
杨尚川
杨尚川

指定特定的配置文件:
<tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory" segAlgorithm="ReverseMinimumMatching"
        conf="solr-6.3.0/example/solr/nutch/conf/word.local.conf"/>

在word.local.conf文件中设置keep.punctuation=true

清风-蓝魔泪
清风-蓝魔泪
试了一下,只要有\r\n字符,高亮就会挪位,我加了一个\r,高亮部分整体挪动一位。我把\r和\n配置在了punctuation.txt里面,重启solr后,依然不生效,请问这种情况应该如何处理。
0
清风-蓝魔泪
清风-蓝魔泪

引用来自“杨尚川”的评论

指定特定的配置文件:
<tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory" segAlgorithm="ReverseMinimumMatching"
        conf="solr-6.3.0/example/solr/nutch/conf/word.local.conf"/>

在word.local.conf文件中设置keep.punctuation=true

看到github上有一个close的issue,我把这2个地方改成了true,解决了一些问题,但还有一些问题未解决

#是否保留空白字符
keep.whitespace=true
#是否保留标点符号,标点符号的定义见文件:punctuation.txt
keep.punctuation=true

我搜索的是这个pj_description,内容搜的是“宝宝发烧”,但下面的高亮却还是有错位,是因为有部分符号不是在punctuation.txt里面吗?就这里而言,比如哪个

0
杨尚川
杨尚川
在分词前,将 \r\n替换为\\r\\n:
"第一行\r\n第二行".replace("\r\n", "\\r\\n")
清风-蓝魔泪
清风-蓝魔泪
大神 可不可以问一下,为什么会出现这种情况,明明源码里面也把\r和\n作为一个字符,加到整体字符集里了。是因为Java对\的转义?
0
杨尚川
杨尚川

引用来自“杨尚川”的评论

在分词前,将 \r\n替换为\\r\\n:
"第一行\r\n第二行".replace("\r\n", "\\r\\n")
因为在分词的时候,把\r\n当做两个字符,而在高亮的时候,却把\r\n当做四个字符。所以如果高亮的时候不能把\r\n当做两个字符,那么就要在分词之前进行转义,\\r\\n。


System.out.println("\r\n".length());
System.out.println("\r\n".charAt(0));
System.out.println("\r\n".charAt(1));
System.out.println(Character.isWhitespace("\r\n".charAt(0)));
System.out.println(Character.isWhitespace("\r\n".charAt(1)));
清风-蓝魔泪
清风-蓝魔泪
多谢大神指点 [抱拳]
返回顶部
顶部