1.fuzzyquery
用编辑距离度量俩词项的相似度
将所有相似的词项填充成布尔查询(或)
取所有相同前缀(前缀长度可以设定)的词项做编辑距离
2.wildcardquery
lucene的wildcardquery是这样的:
例如查询"华南*大学"
首先根据匹配字符"*"获取前缀"华南"
依旧是遍历所有前缀为"华南"的词项
比较之,满足条件的填充为布尔查询(或)
比较法则是:
使用后缀"*大学",删选后缀相同的。
但是:
没有前缀和后缀也可以做百搭搜索
例如"华南*"和"*大学"
第一种是遍历所有前缀为"华南"的即可
第二种是遍历所有的词项(该字段),比较法则是后缀相同。
以上是:clucene/java lucene2.0
我估计java lucene 2.4.0也没有大的变化
当然书上还有许多做法
例如索引项包含了前n-gram和后n-gram
比如华南理工大学,拆分有"华南"索引也有倒序"学大"索引
然后将"华南"和"学大"构建布尔查询
当然实际中如果是中文的话就不是这么做的
中英差异比较大,对于中文字典,FussyQuery WildcardQuery的应用我觉得有限
还是绕不开切词粒度等问题