`

lucene四种索引方式详解

    博客分类:
  • Java
阅读更多
1。今天研究了一下lucene,对于初学者来说,有一个地方以前还没怎么弄懂,可能不是很用心吧。今天又写点小的作业,用lucene来实现,对于以前遇到的这点问题进行了总结。


Lucene提供四个不同的字段类型,你可以从中做出选择:
n        Keyword—不被分析,但是被索引并逐字存储到索引中。这个类型适合于原始值需要保持原样的字段,如URL、文件系统路径、日期、个人名称、社会安全号码、电话号码等等。例如,我们在Indexer(列表1.1)中把文件系统路径作为Keyword字段。
n        UnIndexed—不被分析也不被索引,但是它的值存储到索引中。这个类型适合于你需要和搜索结果一起显示的字段(如URL或数据库主键),但是你从不直接搜索它的值。因为这种类型字段的原始值存储在索引中,这种类型不适合于存放比较巨大的值,如果索引大小是个问题的话。
n        UnStored—和UnIndexed相反。这个字段类型被分析并索引但是不存储在索引中。它适合于索引大量的文本而不需要以原始形式重新获得它。例如网页的主体或任休其它类型的文本文档。
n        Text—被分析并索引。这就意味着这种类型的字段可以被搜索,但是要小心字段大小。如果要索引的数据是一个String,它也被存储;但如果数据(如我们的Indexer例子)是来自一个Reader,它就不会被存储。这通常是混乱的来源,所以在使用Field.Text时要注意这个区别。

上面是lucene in Action中写道的,但是以前不是理解的很到位,今天弄明白了些。
1。对于keyword--我们在程序当中可以通过keyword进行查找,并可以通过get(“keyword”)来获取keyword的值
举例:

    IndexWriter writer = new IndexWriter(dir, getAnalyzer(), false);
    string keyword="1234567".
    Document doc= new Document();
    doc.add(Field.Keyword("telephone","1234567"))
    doc.close();
    writer.addDocument(doc);
   
    Query query = QueryParser.parse(str, "telephone", new StandardAnalyzer());
    Hits hits = is.search(query);
        for (int i = 0; i < hits.length(); i++) {
            Document doc = hits.doc(i);
            System.out.print(doc.get("telephone"));
        }                  
    打印的结果为:1234567
    就是
2。对于Unindexed,我们不能通过这个字段来索引,如果你这样做,那么肯定差不到任何值,但是通过其它的如keyword索引后,如Unindexed的字段设为city。你通过keyword查询后,可以通过调用get("city")的值来获取unIndexed的值。

   IndexWriter writer = new IndexWriter(dir, getAnalyzer(), false);
    string keyword="1234567".
    Document doc= new Document();
    doc.add(Field.Unndexed("telephone","1234567"))
    doc.close();
    writer.addDocument(doc);
   
    Query query = QueryParser.parse(str, "telephone", new StandardAnalyzer());
    Hits hits = is.search(query);
        for (int i = 0; i < hits.length(); i++) {
            Document doc = hits.doc(i);
            System.out.print(doc.get("telephone"));
        }                  
    打印的结果为:null

3. Unstore 这个字段支持索引,但是不保存原始的信息。通过调用get方法获得不了这个字段的值。
    IndexWriter writer = new IndexWriter(dir, getAnalyzer(), false);
    string keyword="1234567".
    Document doc= new Document();
    doc.add(Field.Keyword("telephone","1234567"))
    doc.close();
    writer.addDocument(doc);
   
    Query query = QueryParser.parse(str, "telephone", new StandardAnalyzer());
    Hits hits = is.search(query);
        for (int i = 0; i < hits.length(); i++) {
            Document doc = hits.doc(i);
            System.out.print(doc.get("telephone"));
        }                  
    打印的结果为:null
   这个字段支持索引,我们可以通过这个字段进行索引,然后调用其他字段的值,但是不能通过其他字段索引调用这个字段的        get方法,那么还是不能够得到所塑要的值。

4. text
    分两种情况
    第一,以String为参数:
    IndexWriter writer = new IndexWriter(dir, getAnalyzer(), false);
    string keyword="1234567".
    Document doc= new Document();
    doc.add(Field.Text("telephone","1234567"))
    doc.close();
    writer.addDocument(doc);
   
    Query query = QueryParser.parse(str, "telephone", new StandardAnalyzer());
    Hits hits = is.search(query);
        for (int i = 0; i < hits.length(); i++) {
            Document doc = hits.doc(i);
            System.out.print(doc.get("telephone"));
        }                  

    输出结果为1234567
     这是以字符串卫参数,那么既可以支持索引又可以调用这个字段保存的原始信息。
   
    第二种情况
    以文件流为参数
   IndexWriter writer = new IndexWriter(dir, getAnalyzer(), false);
    string keyword="1234567".
    Document doc= new Document();
    doc.add(Field.Text("telephone",new FileReader("hello.txt")))
    doc.close();
    writer.addDocument(doc);
   
    Query query = QueryParser.parse(str, "telephone", new StandardAnalyzer());
    Hits hits = is.search(query);
        for (int i = 0; i < hits.length(); i++) {
            Document doc = hits.doc(i);
            System.out.print(doc.get("telephone"));
        }                  
    假设未见hello.txt中存在1234567这个字符串。
    输出结果为null
   
    这个是以文件流为参数,他不保存原始的文件信息,但是支持索引。所以这个方法和unstore用起来是一样的。
分享到:
评论

相关推荐

    Lucene3.0之查询类型详解

    Lucene3.0之查询处理(1):原理和查询类型 各种Query对象详解

    Lucene中文分词源码详解

    Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu之类的搜索引 擎,还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql...

    lucene搜索引擎配置详解

    lucene搜索引擎配置,从载入文件,建立索引,搜索三步让你知道lucene搜索的核心技术

    lucene.net 完全入门教程

    lucene.net 完全入门教程,包括 lucene.net 介绍, lucene.net工作模式, lucene.net分词方法和中文分词方法, lucene.net索引的建立详解, lucene.net搜索详解, lucene.net的下载方法, lucene.net搜索结果实现...

    lucene实现全文搜索

    全文检索介绍 索引 分词 Lucene介绍 Lucene应用详解 索引器 检索器 条件查询 实用工具及高亮器 Lucene综合应用——仿搜索引擎

    lucene详解.doc

    1. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 2. 全文检索的实现:Luene全文索引和数据库索引的比较 3. 中文切分词机制简介:基于词库和自动切分词算法的比较 4. 具体的安装和使用简介:系统...

    lucene文档笔记详解

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎

    Lucene中的FST算法描述

    描述了Lucene中如何使用FST算法构建term的内存索引,使用了很多图,直观的展现了FST图的构建流程,能够对想了解lucene内部实现机制原理的同学有帮助。

    lucene 教程详解

    搜索引擎一般由搜索器、索引器、检索器和用户接口四个部分组成: 搜索器  其功能是在互联网中漫游,发现和搜集信息; 索引器  其功能是理解搜索器所搜索到的信息,从中抽取出索引项,用于表示文档以及生成文档库...

    Lucene3教程

    Lucene入门文档,包含索引的创建、查询、更新以及删除demo,各个常用类的详解

    SearchEngineDemo:学习搜索引擎的一些demo

    luceneIndexDetail Lucene索引详解(IndexWriter详解、Document详解、索引更新)博客学习地址: luceneSearchDetail Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)博客...

    人工智能-项目实践-搜索引擎-电影搜索引擎,基于lucene的电影搜索引擎,主要数据来源为百度新闻,豆瓣电影,百度百科,新浪微博

    Lucene检索主要包括建立索引和对结果文档的排序。搜索结果可视化通过spring MVC框架搭建完整的系统实现。 技术实现主要包括:基于Lucene的全文检索技术,spring MVC框架,java爬虫技术,Python爬虫技术,...

    python Elasticsearch索引建立和数据的上传详解

    ok,先来介绍一下Elaticsearch,它是一款基于lucene的实时分布式搜索和分析引擎,是后台系统,用来存储数据,检索数据,属于完全命令行交互。 那为什么选择python作为脚本进行命令的写入和数据的上传呢?那是因为...

    nlp-lucene:电影搜索引擎,基于lucene的电影搜索引擎,主要数据来源为百度新闻,豆瓣电影,百度百科,新浪微博

    Lucene检索主要包括建立索引和对结果文档的排序。搜索结果可视化通过spring MVC框架搭建完整的系统实现。技术实现主要包括:基于Lucene的全文检索技术,spring MVC框架,java爬虫技术,Python爬虫技术,...

    java内核源码-JavaCompass:「Java指南针」为你学习Java指明方向。内容涵盖互联网Java工程师所需要掌握的核心知识,涉及J

    十种垃圾收集器详解 JVM调优工具详解 GC日志详细分析 JVM调优实战 Mysql性能调优 SQL执行原理详解 索引底层剖析 执行计划与SQL优化 Mysql锁机制与事务隔离级别详解 并发编程 JMM内存模型 并发同步处理 并发包之tools...

    Elasticsearch Java虚拟机配置详解

    ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。  我们建立一个网站或应用程序,...

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

     11.2.6 案例:使用Lucene索引和检索 291  11.3 中文分词 296  11.3.1 中文分词方法 296  11.3.2 IK分词器的使用 297  11.4 索引浏览器Luke 299  11.4.1 Luke的功能及下载 299  11.4.2 Luke的用法 300...

    数据结构算法

    12篇学通csharp网络编程——第四篇 TCP应用编程 12篇学通csharp网络编程——第三篇 HTTP应用编程(下) 12篇学通csharp网络编程——第二篇 HTTP应用编程(上) 12篇学通csharp网络编程——第一篇 基础之进程线程 ...

    java文集

    正则表达式 lucene索引合并 探查Weblogic JDBC Multipool 问题 struts通用Exception处理 Grails中默认数据库HSQLDB点滴 从request获取各种路径总结 DIV实现的表格自动伸张与收缩 java 邮件...

Global site tag (gtag.js) - Google Analytics