lucene5 构建索引和查询举例
来源:互联网 发布:hadoop云计算实战 编辑:程序博客网 时间:2024/04/30 16:38
在使用lucene5构建索引和查询的时候,有很多方法和低版本的不太一样,下面就举例说明一下在lucene5中如何构建索引以及查询:
构建索引:
public static void main(String[] args) throws IOException {
// 构建indexwriter
RAMDirectory directory = new RAMDirectory();
StandardAnalyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(directory, config);
// 构建不同类型的索引
Document newDoc = new Document();
// 对于long类型和int类型,如果想在检索时直接按照数值查询出来,那么构建索引的时候要转换成string
Field longOrIntField = new StringField("longOrIntvalue", "123123123", Store.YES);
newDoc.add(longOrIntField);
// stringfield用于直接对内容构建索引,不会进行分词
Field wordField = new StringField("word", "wholeword", Store.NO);
newDoc.add(wordField);
// textfield用于分词之后构建索引
Field textField = new TextField("text", "www.suiyuan521.com haha", Store.NO);
newDoc.add(textField);
// 如果希望某一数据支持排序功能
Field sortField = new NumericDocValuesField("sortTime", 234242424342342L);
newDoc.add(sortField);
// 对于int或者long类型
Field longField = new LongField("longvalue", 13133L, Store.NO);
newDoc.add(longField);
Field intField = new IntField("intvalue", 123, Store.NO);
newDoc.add(intField);
indexWriter.addDocument(newDoc);
}
索引查询:
// 查询对象 此处的indexWriter就是上面的indexWriter
IndexReader ireader = DirectoryReader.open(indexWriter);
IndexSearcher isearcher = new IndexSearcher(ireader);
// 构建排序对象 意思是先按照score排序 然后按照sortTime排序
Sort sort = new Sort(SortField.FIELD_SCORE,new SortField("sortTime", Type.LONG,true));
// 构建query
BooleanQuery.Builder baseQuery = new BooleanQuery.Builder();
// 不分词直接检索内容
Term wordTerm = new Term("word","wholeword");
TermQuery wordQuery = new TermQuery(wordTerm);
baseQuery.add(wordQuery, Occur.MUST);
// 分词检索内容
QueryParser textParser = new QueryParser("text", analyzer);
Query textQuery = textParser.parse("suiyuan");
baseQuery.add(textQuery, Occur.SHOULD);
// 按数值范围检索
NumericRangeQuery<Long> longRange =
NumericRangeQuery.newLongRange("longvalue", 12321L, 45678L,true, true);
baseQuery.add(longRange, Occur.MUST);
TopDocs docs = isearcher.search(baseQuery.build(), 100,sort);
int totalSize =docs.totalHits;
for(int i = 0; i < 10; i ++) {
ScoreDoc scoreDoc = docs.scoreDocs[i];
System.out.println(scoreDoc.doc);
System.out.println(scoreDoc.score);
Document document = isearcher.doc(scoreDoc.doc);
System.out.println(document.get("Store属性为YES的属性名称"));
}
使用总结:
(1)lucene用处是构建索引,不要把所有内容的store都设置成yes,这样会占用大把空间。
(2)合理运用各种类型,可以达到很好的索引效果。对于数据量比较大的,就不要把索引放到内存中了。
- lucene5 构建索引和查询举例
- lucene5.5创建索引和检索
- lucene5--多索引目录查询以及多线程查询
- lucene5.5创建索引
- lucene5--创建索引
- lucene5--索引域选项
- lucene5--多线程创建索引
- lucene全文搜索之二:创建索引器(创建IKAnalyzer分词器和索引目录管理)基于lucene5.5.3
- lucene5.3.1+IKAnalyer 构建简单搜索引擎
- Lucene5.0索引的创建与搜索
- lucene5.0建立索引并进行查找
- lucene5.3.1 索引增删改查
- Lucene5.5对索引进行搜索
- Lucene5(2)索引增删改查
- Lucene使用之构建索引、查询
- Oracle 使用索引和不使用索引的举例
- 键值重复率高的B树索引构建过程和查询操作分析
- 索引查询和批处理查询
- 数据库
- jQuery 获取屏幕高度、宽度
- Applied Math and Machine Learning Basics 摘要笔记
- 的四次C++作业
- mogoTemplate 模板 实现mongodb java的操作 ,根据经纬度查询周边
- lucene5 构建索引和查询举例
- 谈谈对接芝麻信用踩的坑
- JAVA 常用设计模式
- ORACLE数据库日常维护知识总结
- 十大热门大数据技术
- CSS属性(2)
- 读写文件,文件内容操作
- python&DBA遍历文件夹下ip名称SQL 执行该IP下SQL
- C++中使用new最好要显示调用初始化函数