solr 失误的空格 空格是or还是and

来源:互联网 发布:js在数组的末尾加上空 编辑:程序博客网 时间:2024/05/17 21:52

嗯,今天fix了一个困扰我很久的bug,发现真的是被一个“bug”级别的bug困扰好久,甚至还堂而皇之地动用各种方法去修正dixmax查询方式,去修正英文的检索,其实一个小小的back slash就将哥弄头疼了!! \\\\\\\\\

错误描述:

张博用dismax方式查“复旦大学 枫林 图书馆”时,出现的第一条纪录是南京的“敬文图书馆”,让人大跌眼镜。类似的问题有“南京市 玄武湖”等查询。

于此同时,在英文的查询中,united credit union查询也出现错误。原本在english对应的词中添加了下面的filterfactory但是shingle不起作用

 

于是当时傻傻地把每个英文单词之间的空格都替换为“-”,其实不然,只需要将空格“ ”替换为“\ ”,即将空格转义即可。

 

而对于前面涉及到的中文的分词结果,空格的作用是将一个query按照空格分成不同的模块然后对每个模块进行对应的分词。如果有空格,对于“复旦大学 枫林 图书馆”:

+((DisjunctionMaxQuery(((var_poi_chinese:复 var_poi_chinese:旦 var_poi_chinese:大 var_poi_chinese:学 var_poi_chinese:复旦 var_poi_chinese:旦大 var_poi_chinese:大学 var_poi_chinese:复旦大 var_poi_chinese:旦大学) | (var_address_chinese:复 var_address_chinese:旦 var_address_chinese:大 var_address_chinese:学 var_address_chinese:复旦 var_address_chinese:旦大 var_address_chinese:大学 var_address_chinese:复旦大 var_address_chinese:旦大学))) DisjunctionMaxQuery(((var_poi_chinese:枫 var_poi_chinese:林 var_poi_chinese:枫林) | (var_address_chinese:枫 var_address_chinese:林 var_address_chinese:枫林))) DisjunctionMaxQuery(((var_poi_chinese:图 var_poi_chinese:书 var_poi_chinese:馆 var_poi_chinese:图书 var_poi_chinese:书馆 var_poi_chinese:图书馆 var_poi_chinese:library) | (var_address_chinese:图 var_address_chinese:书 var_address_chinese:馆 var_address_chinese:图书 var_address_chinese:书馆 var_address_chinese:图书馆 var_address_chinese:library))))~3) ()

 

而如果将空格替换为or,parsedquery效果为:

+(DisjunctionMaxQuery(((text:复 text:旦 text:大 text:学 text:复旦 text:旦大 text:大学 text:复旦大 text:旦大学) | (var_poi_chinese:复 var_poi_chinese:旦 var_poi_chinese:大 var_poi_chinese:学 var_poi_chinese:复旦 var_poi_chinese:旦大 var_poi_chinese:大学 var_poi_chinese:复旦大 var_poi_chinese:旦大学) | (var_poi_alias:复 var_poi_alias:旦 var_poi_alias:大 var_poi_alias:学 var_poi_alias:复旦 var_poi_alias:旦大 var_poi_alias:大学 var_poi_alias:复旦大 var_poi_alias:旦大学) | (var_address_chinese:复 var_address_chinese:旦 var_address_chinese:大 var_address_chinese:学 var_address_chinese:复旦 var_address_chinese:旦大 var_address_chinese:大学 var_address_chinese:复旦大 var_address_chinese:旦大学))) DisjunctionMaxQuery(((text:枫 text:林 text:枫林) | (var_poi_chinese:枫 var_poi_chinese:林 var_poi_chinese:枫林) | (var_poi_alias:枫 var_poi_alias:林 var_poi_alias:枫林) | (var_address_chinese:枫 var_address_chinese:林 var_address_chinese:枫林))) DisjunctionMaxQuery(((text:图 text:书 text:馆 text:图书 text:书馆 text:图书馆 text:library) | (var_poi_chinese:图 var_poi_chinese:书 var_poi_chinese:馆 var_poi_chinese:图书 var_poi_chinese:书馆 var_poi_chinese:图书馆 var_poi_chinese:library) | (var_poi_alias:图 var_poi_alias:书 var_poi_alias:馆 var_poi_alias:图书 var_poi_alias:书馆 var_poi_alias:图书馆 var_poi_alias:library) | (var_address_chinese:图 var_address_chinese:书 var_address_chinese:馆 var_address_chinese:图书 var_address_chinese:书馆 var_address_chinese:图书馆 var_address_chinese:library))))

 

如果将空格转义,则得到的parse结果为:

+DisjunctionMaxQuery(((text:复 text:旦 text:大 text:学 text: text:枫 text:林 text: text:图 text:书 text:馆 text:复旦 text:旦大 text:大学 text:学 text: 枫 text:枫林 text:林 text: 图 text:图书 text:书馆 text:复旦大 text:旦大学 text:大学 text:学 枫 text: 枫林 text:枫林 text:林 图 text: 图书 text:图书馆 text:library) | (var_poi_chinese:复 var_poi_chinese:旦 var_poi_chinese:大 var_poi_chinese:学 var_poi_chinese: var_poi_chinese:枫 var_poi_chinese:林 var_poi_chinese: var_poi_chinese:图 var_poi_chinese:书 var_poi_chinese:馆 var_poi_chinese:复旦 var_poi_chinese:旦大 var_poi_chinese:大学 var_poi_chinese:学 var_poi_chinese: 枫 var_poi_chinese:枫林 var_poi_chinese:林 var_poi_chinese: 图 var_poi_chinese:图书 var_poi_chinese:书馆 var_poi_chinese:复旦大 var_poi_chinese:旦大学 var_poi_chinese:大学 var_poi_chinese:学 枫 var_poi_chinese: 枫林 var_poi_chinese:枫林 var_poi_chinese:林 图 var_poi_chinese: 图书 var_poi_chinese:图书馆 var_poi_chinese:library) | (var_address_chinese:复 var_address_chinese:旦 var_address_chinese:大 var_address_chinese:学 var_address_chinese: var_address_chinese:枫 var_address_chinese:林 var_address_chinese: var_address_chinese:图 var_address_chinese:书 var_address_chinese:馆 var_address_chinese:复旦 var_address_chinese:旦大 var_address_chinese:大学 var_address_chinese:学 var_address_chinese: 枫 var_address_chinese:枫林 var_address_chinese:林 var_address_chinese: 图 var_address_chinese:图书 var_address_chinese:书馆 var_address_chinese:复旦大 var_address_chinese:旦大学 var_address_chinese:大学 var_address_chinese:学 枫 var_address_chinese: 枫林 var_address_chinese:枫林 var_address_chinese:林 图 var_address_chinese: 图书 var_address_chinese:图书馆 var_address_chinese:library)))

 

得到期望的parse结果。

0 0