`
zha_zi
  • 浏览: 590123 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

lucene多索引上的搜索

阅读更多

上代码

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MultiSearcher;
import org.apache.lucene.search.Query;

public class Multisearcher {

    private static String INDEX_STORE_PATH1 = "C:\\multi\\1";
    private static String INDEX_STORE_PATH2 = "C:\\multi\\2";

    public static void main(String[] args) throws Exception {
        Multisearcher.multisearcher();
    }

    public static void multisearcher() throws Exception {
        IndexWriter writer = new IndexWriter(INDEX_STORE_PATH1, new StandardAnalyzer(), true);
        writer.setUseCompoundFile(false);

        Document doc1 = new Document();
        Field f1 = new Field("bookname", "钢铁是怎样炼成的", Field.Store.YES, Field.Index.TOKENIZED);
        Field f11 = new Field("price", "20.5", Field.Store.YES, Field.Index.UN_TOKENIZED);

        doc1.add(f1);
        doc1.add(f11);

        Document doc2 = new Document();
        Field f2 = new Field("bookname", "钢铁战士", Field.Store.YES, Field.Index.TOKENIZED);
        Field f22 = new Field("price", "18.4", Field.Store.YES, Field.Index.UN_TOKENIZED);

        doc2.add(f2);
        doc2.add(f22);

        Document doc3 = new Document();
        Field f3 = new Field("bookname", "钢和铁是两种不同的元素", Field.Store.YES, Field.Index.TOKENIZED);
        Field f33 = new Field("price", "7.6", Field.Store.YES, Field.Index.UN_TOKENIZED);

        doc3.add(f3);
        doc3.add(f33);

        writer.addDocument(doc1);
        writer.addDocument(doc2);
        writer.addDocument(doc3);

        writer.close();

        //创建第二个索引器;
        IndexWriter writer2 = new IndexWriter(INDEX_STORE_PATH2, new StandardAnalyzer(), true);
        writer2.setUseCompoundFile(false);

        Document doc4 = new Document();
        Field f4 = new Field("bookname", "钢要比铁有更多的元素", Field.Store.YES, Field.Index.TOKENIZED);
        Field f44 = new Field("price", "22.5", Field.Store.YES, Field.Index.UN_TOKENIZED);

        doc4.add(f4);
        doc4.add(f44);

        Document doc5 = new Document();
        Field f5 = new Field("bookname", "钢和铁是两种重要的金属", Field.Store.YES, Field.Index.TOKENIZED);
        Field f55 = new Field("price", "15.9", Field.Store.YES, Field.Index.UN_TOKENIZED);

        doc5.add(f5);
        doc5.add(f55);

        Document doc6 = new Document();
        Field f6 = new Field("bookname", "钢铁是两种重要的金属", Field.Store.YES, Field.Index.TOKENIZED);
        Field f66 = new Field("price", "19.00", Field.Store.YES, Field.Index.UN_TOKENIZED);

        doc6.add(f6);
        doc6.add(f66);

        writer2.addDocument(doc4);
        writer2.addDocument(doc5);
        writer2.addDocument(doc6);

        writer2.close();

        String query1 = "钢";
        String query2 = "[10 TO 20]";//注意格式:中括号还有关键字TO是大写的
        String[] queries = { query1, query2 };

        //指定两个域Field
        String field1 = "bookname";
        String field2 = "price";
        String[] fields = { field1, field2 };

        //指定查询字句之间的关系
        BooleanClause.Occur[] clauses = { BooleanClause.Occur.MUST, BooleanClause.Occur.MUST };

        //转成多域查询MultiFieldQuery
        Query q = MultiFieldQueryParser.parse(queries, fields, clauses, new StandardAnalyzer());

        //打印Query的内容
        System.out.println(q.toString());

        //创建两个IndexSearcher,以实现在多个索引目录进行查询
        IndexSearcher searcher1 = new IndexSearcher(INDEX_STORE_PATH1);
        IndexSearcher searcher2 = new IndexSearcher(INDEX_STORE_PATH2);

        IndexSearcher[] searchers = { searcher1, searcher2 };

        //使用MultiSearcher进行多域搜索
        MultiSearcher searcher = new MultiSearcher(searchers);
        Hits hits = searcher.search(q);
        for (int i = 0; i < hits.length(); i++) {
            System.out.println(hits.doc(i));
        }
    }
}
 
分享到:
评论

相关推荐

    基于lucene的索引与搜索

    基于Lucene的索引与搜索技术,不仅涉及到数据的高效存储和检索,还包括了文本预处理、分词、相关性排序等多个环节。 第二章 搜索引擎的结构 2.1 系统概述 搜索引擎主要由三部分组成:网络爬虫(也称为网络机器人...

    lucene全文检索简单索引和搜索实例

    二、Lucene索引创建流程 1. 初始化:首先,我们需要导入Lucene库,并创建一个标准的Analyzer,例如StandardAnalyzer,它对输入的文本进行标准化处理。 2. 创建索引目录:索引数据会存储在一个Directory对象中,...

    基于lucene技术的增量索引

    本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...

    最简单的Lucene建立、搜索索引的方法

    **Lucene简介** Lucene是Apache软件基金会的一个开放源代码项目,它是一个高性能、全文本检索库,...通过上述步骤,你可以在MyEclipse10环境下使用Lucene快速建立和搜索索引,为你的应用程序添加强大的全文检索功能。

    Lucene之删除索引

    在深入探讨Lucene删除索引这一主题之前,我们先...总之,Lucene的删除索引机制是一个复杂但高效的过程,涉及到了位向量、段管理和索引优化等多个环节。在实际应用中,合理使用这些功能可以确保索引的准确性和资源效率。

    lucene索引结构原理

    **Lucene索引结构原理** Lucene是Apache软件基金会的开放源代码全文搜索引擎库,它为Java开发人员提供了强大的文本搜索功能。理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们...

    lucene索引优化多线程多目录创建索引

    本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...

    Lucene读取索引文件

    一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...

    lucene并行索引

    综上所述,基于Lucene的分布式并行索引技术是解决大数据环境下高效索引构建问题的有效手段。通过采用内存缓冲机制、分布式处理和智能合并策略等关键技术,不仅可以显著提升索引构建的速度,还能有效改善用户体验。...

    Lucene索引器实例

    以上就是Lucene索引器实例的基本介绍,通过这个实例,我们可以理解到如何使用Lucene来创建、管理和搜索文本索引。在实际项目中,可以根据需求选择合适的存储(如硬盘目录或分布式存储)、优化分析器配置、处理大量...

    lucene 索引小示例

    《Lucene索引小示例解析》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小...

    lucene实现索引查询

    Lucene 是一个高性能、全文本搜索库,被广泛用于构建高效的搜索引擎和信息检索系统。它提供了完整的搜索功能,包括分析、索引、查询以及结果排序等。在Java开发中,Lucene 提供了丰富的API来简化这些操作。以下是...

    Lucene索引和查询

    **Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文搜索引擎库,它提供了文本检索的核心工具,使得开发者能够快速构建自己的搜索应用。本项目中的代码旨在展示如何利用Lucene对多个文件夹下的数据进行...

    Lucene.NET全文索引搜索Demo项目

    **Lucene.NET全文索引搜索Demo项目** Lucene.NET是一个基于Apache Lucene的开源全文搜索引擎库,它为.NET Framework提供高性能、可扩展的信息检索服务。这个"Lucene.NET全文索引搜索Demo项目"是一个实际应用示例,...

    lucene索引查看程序及代码

    《深入理解Lucene索引查看程序与代码》 在信息技术领域,搜索引擎的高效运作离不开底层索引技术的支持,而Lucene作为Apache软件基金会的一个开放源代码项目,正是一个强大的全文检索库,它提供了高效的文本搜索功能...

    Lucene3.0创建索引

    - 在完成所有文档的索引后,调用`indexWriter.close()`来关闭`IndexWriter`,这一步骤非常重要,因为它会确保所有更改被保存到磁盘上。 #### 五、注意事项 - 确保源文件夹路径和索引文件夹路径正确。 - 调整字段...

    深入 Lucene 索引机制

    以下是对Lucene索引机制的详细解析: 一、Lucene的索引过程 1. 文档分析:当向Lucene添加文档时,首先会经过一个分词器(Tokenizer),将文本拆分成一系列的词项(Token)。接着,这些词项会被过滤(Filter)和...

    lucene索引查看工具及源码

    Luke 提供了诸如查看文档字段、搜索索引、查看倒排索引结构等功能,对于开发者来说是了解和调试 Lucene 索引的利器。 Luke 的源码也公开在 GitHub 上,这对于想深入理解 Lucene 内部机制的开发者来说是一个宝贵的...

    深入 Lucene 索引机制深入 Lucene 索引机制

    总结来说,Lucene的索引机制是其高效搜索能力的关键。通过建立倒排索引,Lucene能够在大量数据中快速找到匹配的文档,使得全文检索变得简单且高效。对于Java开发者而言,集成Lucene能极大地提升应用程序的搜索功能,...

Global site tag (gtag.js) - Google Analytics