簡體   English   中英

在Lucene中使字段不區分大小寫

[英]Make field case insensitive in lucene

如何使Lucene中的字段不區分大小寫? 假設我有以下文件:

用戶:xyz

現在,查詢“ user:xyz”,“ uSer:xyz”或“ usEr:xyz”的結果應返回該文檔。

可能的解決方案是在索引和搜索時降低字段的大小寫。 但是檢索文檔時我需要字段的確切值。 另外,另一種解決方案是對該字段建立兩次索引,但這也不是正確的解決方案。

這是lucene的例子。 當查詢為“ user:xyz”時,文檔不匹配。 但是,如果我使用查詢“ User:xyz”,則該文檔匹配,因為在索引時我將字段設置為“ User”。

public void testFieldCaseSensitive() throws ParseException,
        QueryNodeException {
    StandardQueryParser parser = new StandardQueryParser();
    Query luceneQuery = parser.parse("user:xyz","");
    MemoryIndex memoryIndex = new MemoryIndex();
    memoryIndex.addField("User", "xyz", new StandardAnalyzer(
            Version.LUCENE_43));
    memoryIndex.search(luceneQuery);
    Assert.assertTrue(memoryIndex.search(luceneQuery) > 0);
}

字段名稱區分大小寫。 據我所知,沒有開關可以翻轉以使它們不然。

解決此問題的最合理的方法可能是確保在索引文檔時,所有字段名稱都小寫。 然后,在查詢時,如果不針對任何區分大小寫的字段進行查詢,則可以只使用String.toLowercase()來使整個查詢字符串都變為小寫,從而有效地使其不區分大小寫。

無論您搜索什么(區分大小寫或不區分大小寫),Apache Lucene都不區分大小寫,它將為您帶來結果。

基本上,您使用的索引已經覆蓋了它,並且在大多數情況下是StandardAnalyzer。 我剛剛測試過。

搜索:

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)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM