lucene mysql 实例_Lucene MoreLikeThis 完整示例

public static void main(String[] args) throws Exception {

Directory directory = new RAMDirectory();

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);

IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_43,

analyzer);

IndexWriter writer = new IndexWriter(directory, conf);

// Field选项,让其存储term vector加快like分析速度,

// 否则需要在执行mlt.like(0)时动态的生成term vector

FieldType TYPE_STORED = new FieldType();

TYPE_STORED.setIndexed(true);

TYPE_STORED.setTokenized(true);

TYPE_STORED.setStored(true);

TYPE_STORED.setStoreTermVectors(true);

TYPE_STORED.freeze();

String[] docs = { "JQuery in Action", "Lucene in Action",

"Sprint in Action", "Thinking in Java" };

for (int i = 0; i < docs.length; i++) {

Document d = new Document();

d.add(new Field("content", docs[i], TYPE_STORED));

writer.addDocument(d);

}

writer.close();

// ----------------向目录对象中添加document------------------

IndexReader reader = DirectoryReader.open(directory);

IndexSearcher searcher = new IndexSearcher(reader);

MoreLikeThis mlt = new MoreLikeThis(reader);

//如果存储中已经提供term vector,可以不用提供分析器啦,

//分析器的作用也就产生term vector

mlt.setAnalyzer(analyzer);

//不设置的话会使用名为"contens"的fieldName

mlt.setFieldNames(new String[] { "content" });

//term在源document中出现给定的次数才是一个有效的term

mlt.setMinTermFreq(1);

//一个term至少要在给定的document中出现,查看源码,MoreLikeThis.createQueue中,

//这个值和IndexReader.docFreq(Term term)返回值进行比较的

mlt.setMinDocFreq(1);

Query query = mlt.like(0);

TopDocs topDocs = searcher.search(query, 10);

for (ScoreDoc doc : topDocs.scoreDocs) {

System.out.println(doc.doc);

Document dlike = reader.document(doc.doc);

System.out.println(dlike.getField("content").stringValue());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值