solr 失误的空格 空格是or还是and
2014-02-28 12:06
190 查看
嗯,今天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结果。
错误描述:
张博用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结果。
相关文章推荐
- Solr fields sorting 排序相关(Integers, Longs, Floats, or String and multi-language 多语言相关)
- 当“山寨文化”风行网络,我们是追捧还是打杀? Simulated Culture is largely emerging on the internet, and should we follow or force it our?
- 小议lucene搜索表达式中的AND和OR以及+和空格
- Hive中and和or的执行顺序
- python中and和or的用法
- eslint报错:Expected an assignment or function call and instead saw an expression
- python 关键字 之 and 与 or
- Please remove your implementation of this method and set the cell properties accessoryType and/or e
- Maven报错Please ensure you are using JDK 1.4 or above and not a JRE解决方法
- python中and和or的用法
- python中的and和or
- WARNING: old character encoding and/or character set解决办法
- Linux Change or Rename User Name and UID
- INF: Understanding and Resolving SQL Server 7.0 or 2000 Blocking Problems [ZT- from MS]
- Diagnosing and Resolving Error ORA-04031 on the Shared Pool or Other Memory Pools (文档 ID 146599.1)
- Python中的逻辑运算符‘and’、‘or’和‘not’
- [笔记-柔性字符串匹配]Shift-And与Shift-Or
- Java实现对MongoDB的AND、OR和IN操作 ,大于、小于等判断
- FW - check whether tree is balanced or not - find the max and min of one tree- 2013年12月18日13:12:04
- Standardization, or mean removal and variance scaling