日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lucene中对不同的域使用不同的分析器

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中对不同的域使用不同的分析器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。