lucene中对不同的域使用不同的分析器Java认证考试

文章作者 100test 发表时间 2010:01:01 15:50:48
来源 100Test.Com百考试题网


  在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.

  编辑特别推荐:

  Java核心API需要掌握的程度

  Java编程实例:Java版农历和阳历转换源码

  Java认证辅导:非阻塞I/O简介

  Tomcat内存溢出的三种情况及解决办法分析

  Java输入数据流详解



相关文章


通过HttpClient获取响应内容字符集Java认证考试
Java应用中使用ProxoolJava认证考试
Java向线程传递数据的三种方法Java认证考试
Java按字节长度截取字符串Java认证考试
lucene中对不同的域使用不同的分析器Java认证考试
JSP程序中Listener和Timer的运用Java认证考试
System.arraycopy方法的使用Java认证考试
tomcat监控器和定时器Java认证考试
java认证辅导:java调用存贮过程Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛