Java 在lucene中使字段不区分大小写

Java 在lucene中使字段不区分大小写,java,solr,lucene,information-retrieval,Java,Solr,Lucene,Information Retrieval,如何在lucene中使字段不区分大小写?假设我有以下文档: 用户:xyz 现在,应该返回文档作为查询“user:xyz”、“user:xyz”或“user:xyz”的结果 可能的解决方案是在索引和搜索时将字段小写。但是在检索文档时,我需要字段的精确值。另外,另一种解决方案是对字段进行两次索引,但这也不是合适的解决方案 这里是lucene的例子。当查询为“user:xyz”时,文档不匹配。但如果我使用查询“User:xyz”,那么文档将匹配,因为在索引时,我将字段设置为“User” 字段名区分大小

如何在lucene中使字段不区分大小写?假设我有以下文档:

用户:xyz

现在,应该返回文档作为查询“user:xyz”、“user:xyz”或“user:xyz”的结果

可能的解决方案是在索引和搜索时将字段小写。但是在检索文档时,我需要字段的精确值。另外,另一种解决方案是对字段进行两次索引,但这也不是合适的解决方案

这里是lucene的例子。当查询为“user:xyz”时,文档不匹配。但如果我使用查询“User:xyz”,那么文档将匹配,因为在索引时,我将字段设置为“User”


字段名区分大小写。据我所知,没有开关翻转,以使他们否则


可能最合理的方法是确保在索引文档时,所有字段名都是小写的。然后,在查询时,如果您没有查询任何区分大小写的字段,您可以使用
String.toLowercase()
,使整个查询字符串也小写,从而有效地使其不区分大小写。

Apache Lucene已经不区分大小写,无论您搜索什么(区分大小写或不区分大小写),它都会为您带来结果

基本上,您使用的索引已经涵盖了它,在大多数情况下,它是StandardAnalyzer。我刚刚测试过

用于搜索:

DocSearchEngine searcher = new DocSearchEngine();
ScoreDoc[] hits = searcher.searchIndexWithQueryParser("SeArch TeXT");
List<ResStructure> resultSet = searcher.printResultList(hits);

如果我没有错的话,我想它已经不区分大小写了?你能提供一些例子吗?我已经处理了值,但没有处理字段本身。是的,当然,请稍后查看我的答案。对不起,我第一次阅读时没有正确理解您的问题。我应该仔细阅读。我现在在我的帖子中添加了lucene代码。我指的不是值,而是字段。你能看一下代码和注释吗?我已经看了你的代码,我知道你在谈论价值。请添加luceneQuery.setAllowReadingWildcard(true);它绕过您选择的分析器并给出结果。请参阅我尝试的parser.setAllowReadingWildcard(true)链接,但它仍然不起作用。我自己也做过,效果很好——用户非常喜欢它。
DocSearchEngine searcher = new DocSearchEngine();
ScoreDoc[] hits = searcher.searchIndexWithQueryParser("SeArch TeXT");
List<ResStructure> resultSet = searcher.printResultList(hits);
writer = new IndexWriter(FSDirectory.open(new File(indexDir)),
    new IndexWriterConfig(Version.LUCENE_45 ,new StandardAnalyzer(Version.LUCENE_45)));