lucene中对不同的域使用不同的分析器
在lucene使用過程中,如果要對同一IndexWriter中不同Document,不同Field中使用不同的analyzer,我們該如何實現呢?
通過對《lucene in action》的閱讀,發現是可以解決這一問題的。lucene可以正對整個IndexWriter對象或者每一個document對象或者特定Field使用不同的分析器。
Analyzer analyzer = new StandardAnalyzer();
IndexWriter writer = new IndexWriter(direcotry, analyzer, true); //
Document doc = new Document();
doc.add(new Field("title", "this is title", Field.Store.COMPRESS,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.add(new Field("content", "this is content", Field.Store.COMPRESS,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
writer.addDocument(doc); //這是大部分情況下使用的一個方法
其實還有另外一個方法,原型如下:
lucene自帶文檔 寫道
addDocument(Document doc, Analyzer analyzer)
Adds a document to this index, using the provided analyzer instead of the value of getAnalyzer().
所以我們還可以寫成這樣:
writer.addDocument(doc, analyzer);
?// 這里的analyzer是指另外一個你指定的analyzer,不同于上面的StandardAnalyzer
?那么如何針對特定Field使用不同分析器呢,lucene包里面有個PerFieldAnalyzerWrapper類,解決了這一問題,這是lucene的文檔里面的一段話:
lucene自帶文檔 寫道
Example usage:
PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer());
aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
In this example, StandardAnalyzer will be used for all fields except "firstname" and "lastname", for which KeywordAnalyzer will be used.
A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing.
PreFieldAnalyzerWrapper類的構造函數中需要一個默認的分析器作為參數。為了給不同的Field指定不同的analyzer,就需要調用該類的addAnalyzer()方法。上面的E文相信大家都能看懂的,就不需要我來翻譯了,我的英語很差,著急啊,呵呵。
也就是說大家以前初始化分析器的時候用這一句:
Analyzer analyzer = new StandardAnalyzer();??
?現在可以改用
PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer());??
然后如果需要特定域的分析器就調用addAnalyzer方法
analyzer.addAnalyzer("fieldname", new KeywordAnalyzer());??
?
對了,最后說一下,PerFieldAnalyzerWrapper類也是在org.apache.lucene.analysis包下面的,只需要
import org.apache.lucene.analysis.PerFieldAnalyzerWrapper;??
轉載于:https://www.cnblogs.com/lindayyh/archive/2009/10/23/1588883.html
總結
以上是生活随笔為你收集整理的lucene中对不同的域使用不同的分析器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: solidworks电气元件3d库_丨软
- 下一篇: Solaris 下 Oracle imp