问题描述:
被索引的文本:luxu001207的博客
当输入关键词l001或0012时,返回结果为0
当输入关键词001207可正确返回结果
为什么会出现这种情况呢?
因为Lucene对数字、字母的索引是按“单词”的概念来进行索引的,连续的字母、数字、下划线、中横线,Lucene将之当做一个单词进行索引,因此搜索的时候必须输入整个单词才能正确返回结果。
那么,如果需要输入001即可返回包含001207、0012564等的结果时,我们可以在创建索引的时候对所有数字、英文单词进行处理(注意:luxu-001207等字串Lucene也是当做一个单词处理,而不会自动分为luxu-001207、luxu、001207)。
至于具体的处理方式,根据不同的需求会有不同的处理方法,这里就不细表了。
简单的处理(比如自动将如luxu-001207等包含中横杠、下划线的单词拆分),可以考虑直接使用Replace实现
string input="luxu-001207的博客";
input = Regex.Replace(input, @"([a-zA-Z\d]*)(_-)([a-zA-Z\d]*)", "$1$2$3 $1 $3", RegexOptions.Compiled | RegexOptions.Singleline);