默认情况下,单词“Word”和“word”不一样。如何让Lucene不区分大小写?
答案 0 :(得分:13)
最简单的方法是降低所有可搜索内容以及查询。请参阅LowerCaseFilter
文档。您还可以使用Wildcard
个查询进行不区分大小写的搜索,因为它会绕过Analyzer
。
如果愿意,您可以将内容存储在不同的字段中以捕获不同的案例配置。
答案 1 :(得分:5)
StandardAnalyzer
应用LowerCaseFilter
,使“Word”和“word”相同。您可以将其传递给IndexWriter
和QueryParser
。例如。几行代码:
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
IndexWriter writer = new IndexWriter(dir, analyzer, true, mlf);
QueryParser parser = new QueryParser(Version.LUCENE_30, field, analyzer);
答案 2 :(得分:1)
将LowerCaseFilterFactory添加到Schema.xml中该字段的fieldType。例如,
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
答案 3 :(得分:1)
除了使用StandardAnalyzer
(其中包括LowerCaseFilter
和常见英语单词(例如“ the”)的过滤器之外,还应确保使用TextField
s构建文档,而不是用于精确搜索的StringField
。