如何使lucene不区分大小写

时间:2011-04-01 11:36:39

标签: java lucene

默认情况下,单词“Word”和“word”不一样。如何让Lucene不区分大小写?

4 个答案:

答案 0 :(得分:13)

最简单的方法是降低所有可搜索内容以及查询。请参阅LowerCaseFilter文档。您还可以使用Wildcard个查询进行不区分大小写的搜索,因为它会绕过Analyzer

如果愿意,您可以将内容存储在不同的字段中以捕获不同的案例配置。

答案 1 :(得分:5)

StandardAnalyzer应用LowerCaseFilter,使“Word”和“word”相同。您可以将其传递给IndexWriterQueryParser。例如。几行代码:

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