TermVector是Lucene 1.4新增的 它提供一种向量机制来进行模糊查询,TermVector保存Token.getPositionIncrement() 和Token.startOffset() 以及Token.endOffset() 信息.
Field.TermVector.NO:不保存term vectors
Field.TermVector.YES:保存term vectors
Field.TermVector.WITH_POSITIONS:保存term vectors.(保存值和token位置信息)
Field.TermVector.WITH_OFFSETS:保存term vectors.(保存值和Token的offset)
Field.TermVector.WITH_POSITIONS_OFFSETS:保存term vectors.(保存值和token位置信息和Token的offset)
下面是个简单的例子:
Analyzer analyzer = new StandardAnalyzer();
RAMDirectory directory = new RAMDirectory();
/**
* 创建索引
*
* @throws IOException
*/
public void index() throws IOException{
IndexWriter indexWriter = new IndexWriter(directory,analyzer,true);
Document doc1 = new Document();
doc1.add(new Field("title","java",Store.YES,Index.TOKENIZED));
doc1.add(new Field("author","callan",Store.YES,Index.TOKENIZED));
doc1.add(new Field("subject", "java一门编程语言",
Store.YES, Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(doc1);
Document doc2 = new Document();
doc2.add(new Field("title","english",Store.YES,Index.TOKENIZED));
doc2.add(new Field("author","wcq",Store.YES,Index.TOKENIZED));
doc2.add(new Field("subject", "英语用的人很多",
Store.YES, Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(doc2);
Document doc3 = new Document();
doc3.add(new Field("title","asp",Store.YES,Index.TOKENIZED));
doc3.add(new Field("author","ca",Store.YES,Index.TOKENIZED));
doc3.add(new Field("subject", "asp很多人用",
Store.YES, Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(doc3);
indexWriter.optimize();
indexWriter.close();
}
// 进行搜索
public void searcher() throws IOException{
IndexSearcher searcher = new IndexSearcher(directory);
// 搜索书名为java的索引
TermQuery query = new TermQuery(new Term("title","java"));
Hits hits = searcher.search(query);
// 能找到一条记录
for(int i = 0; i < hits.length(); i++){
Document doc = hits.doc(i);
System.out.println("书名:" + doc.get("title") + " " + "作者:" + doc.get("author") + "简介:" + doc.get("subject"));
System.out.println("相关的书:");
docsLike(hits.id(i));
}
}
// 在subject中模糊搜索与doc相进的索引
public void docsLike(int id) throws IOException {
IndexReader reader = IndexReader.open(directory);
TermFreqVector vector = reader.getTermFreqVector(id, "subject");
BooleanQuery query = new BooleanQuery();
for (int j = 0; j < vector.size(); j++) {
TermQuery tq = new TermQuery(new Term("subject",
vector.getTerms()[j]));
query.add(tq, BooleanClause.Occur.SHOULD);
}
IndexSearcher searcher = new IndexSearcher(directory);
Hits hits = searcher.search(query);
printResult(hits);
}
// 显示结果
public void printResult(Hits hits) throws IOException{
for(int i = 0; i < hits.length(); i++){
Document d = hits.doc(i);
System.out.println("书名:" + d.get("title")+" " + "作者:" + d.get("author") +" " + "简介:" + d.get("subject"));
}
}
public static void main(String[] args) throws IOException {
TermFreqVectorTest3 test = new TermFreqVectorTest3();
test.index();
test.searcher();
}
搜索结果:
书名:java 作者:callan简介:java一门编程语言
相关的书:
书名:java 作者:callan 简介:java一门编程语言
书名:english 作者:wcq 简介:英语用的人很多
搜索书名为java 的索引,并且搜索与java的简介相关的索引.
将书<<java>>的subject分词为java/一/门/编/程/语/言/
在subject中搜索包含java/一/门/编/程/语/言/的索引
<<english>>包含语
分享到:
相关推荐
NULL 博文链接:https://iamyida.iteye.com/blog/2201196
用lucene于本地数据库建立连接,进行查询,代码已经经过测试。
NULL 博文链接:https://baobeituping.iteye.com/blog/847085
Lucene创建索引,查询索引的简单使用。
lucene
lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记
在Eclipse环境中运用java,Lucene建索引及查询关键字
教大家使用lucene进行简单的开发,贴出了主要的源码和注释.
Lucene3.0之查询处理(1):原理和查询类型 各种Query对象详解
使用Lucene.net进行全文查找多关键字匹配
java1.5环境下创建修改删除增加模糊查询索引文件包 使用Lucene3.01+IKAnalyzer3.2 范例java文件,有兴趣的可以看看 欢迎指教
lucene引擎和sqlite数据库分词查询,统计单词频率,统计重点单词,重点句子
对于初学者很快掌握lucene 该文档详细的介绍了如何使用lucene 以及快速理解掌握lucene
Lucene 正则表达式 regexQuery
对学习lucene开发的人员来说这个项目非常有价值 值得参考">项目的页面都存在WebRoot WEB INF jsp下 网上搜索博客园网页的地址 输入到相应搜索框 该项目可以自动对博客园网站中的文章 项目中限制了文章数量 建立...
lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合
Lucene如何使用TokenFilter进行再分词,里面又我的源代码和注释!!
为提高图书馆中文信息检索的精确度和有效性,设计了基于Lucene的语段模糊匹配中文检索系统。其采用了自然语言处理中的词语切分技术,使输入条件可以直接通过自然语言的方式提交,同时针对语段匹配的实际问题情境,设计了...
lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用
lucene的查询语法事例.