【问题标题】:Lucene case sensitive & insensitive searchLucene 区分大小写和不区分大小写的搜索
【发布时间】:2010-03-21 16:10:42
【问题描述】:

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

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

一种可能的方法是使用 2 个索引。一个有案例,一个没有,两者都搜索。自然,这里有一些冗余,因为我需要索引两次。

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

【问题讨论】:

标签: java lucene


【解决方案1】:

您是否已经尝试过 copyField?见http://wiki.apache.org/solr/SchemaXml#Copy_Fields

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

【讨论】:

  • 好吧,copyField 是 Solr 的一项功能,我使用的是准系统 Lucene。然而,我可以只添加一个带有相同索引文本的额外字段,小写。这比创建一个完全独立的索引要好得多,所以 +1。
  • 起床,好的。我遇到了完全相同的问题,但正在使用 solr。我添加这个答案有点太快了。
  • 我已经开始使用额外的字段,所以你的回答让我朝着正确的方向前进。这就是我所需要的。再次感谢。我会保持开放,看看我是否能得到更有效的解决方案。
  • 将标记为正确答案。同样,不完全是解决方案,而是朝着正确的方向轻推。
【解决方案2】:

Lucene 搜索区分大小写, 只是所有输入通常都是 通过时小写 Queryparser ,所以感觉就像 不区分大小写。换句话说, 之前不要小写您的输入 索引,不要小写你的 查询(即选择一个分析器 不小写)关键字分析器 例如。

[setLowercaseExpandedTerms][1](boolean lowercaseExpandedTerms)

您可以使用区分大小写的分析器对术语进行索引,当您想要不区分大小写的查询时,请使用不会将您的术语转换为小写的类

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

【讨论】:

  • 自然,使用区分大小写的分析器和低关心查询不会产生正确的结果。
  • 你能用 sqlite 或 mysql 做同样的事情吗?
  • @Naveen:sqlite 和 mysql 都有成熟的数据库引擎,你的问题是什么?
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 2012-01-31
  • 2017-12-01
  • 2010-09-15
  • 1970-01-01
  • 2013-06-15
  • 2017-06-16
  • 2013-03-06
相关资源
最近更新 更多