Lucene区分大小写和不敏感的搜索

zvi*_*ico 9 java lucene

我有一个Lucene索引,目前区分大小写.我想添加一个不区分大小写的搜索选项作为后备.这意味着与案例匹配的结果将获得更多权重并将首先出现.例如,如果结果数量限制为10,并且有10个匹配我的情况,这就足够了.如果我只找到7个结果,我可以从不区分大小写的搜索中添加3个结果.

我的情况实际上更复杂,因为我有不同重量的物品.理想情况下,匹配"错误"的情况会增加一些重量.不用说,我不想要重复的结果.

一种可能的方法是有2个索引.一个有一个案例,一个没有和搜索两个.当然,这里有一些冗余,因为我需要两次索引.

有更好的解决方案吗?想法?

Kar*_*ell 6

你有没有试过copyField?请参阅http://wiki.apache.org/solr/SchemaXml#Copy_Fields

如果没有定义具有不同配置的新字段B,则通过copyField将字​​段A复制到B中

  • 好吧,copyField是一个Solr功能,我正在使用简单的Lucene.然而,我可以添加一个带有相同索引文本的额外字段,小写.这比创建一个完全独立的索引要好得多,所以+1. (3认同)

Nar*_*yan 5

Lucene搜索区分大小写,只是通过Queryparser时所有输入通常都是低位的,因此感觉它不区分大小写.换句话说,在索引之前不要小写你的输入,也不要小写你的查询(例如选择一个不小写的分析器)关键字分析器.

[setLowercaseExpandedTerms][1](boolean lowercaseExpandedTerms)
Run Code Online (Sandbox Code Playgroud)

你可以使用区分大小写的分析器索引术语,当你想要不区分大小写的查询时,使用一个不会将你的术语转换为小写的类

查看通配符,前缀和模糊查询