FuzzyQuery是一种模糊查询,它可以简单地识别两个相近的词语。下面以11.10为例进行详细介绍。

package ch11;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.Term;

import org.apache.lucene.search.FuzzyQuery;

import org.apache.lucene.search.Hits;

import org.apache.lucene.search.IndexSearcher;

public class FuzzyQueryTest {

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

         //生成Document对象

         Document doc1 = new Document();

         //添加“content”字段的内容

         doc1.add(Field.Text("content", "david"));

         //添加“title”字段的内容

         doc1.add(Field.Keyword("title", "doc1"));

         Document doc2 = new Document();

         doc2.add(Field.Text("content", "sdavid"));

         doc2.add(Field.Keyword("title", "doc2"));

         Document doc3 = new Document();

         doc3.add(Field.Text("content", "davie"));

         doc3.add(Field.Keyword("title", "doc3"));

         //生成索引书写器

         IndexWriter writer = new IndexWriter("c://index",

                 new StandardAnalyzer(), true);

         //将文档添加到索引中

         writer.addDocument(doc1);

         writer.addDocument(doc2);

         writer.addDocument(doc3);

         //关闭索引写器

         writer.close();

         //生成索引搜索器

         IndexSearcher searcher = new IndexSearcher("c://index");

         Term word1 = new Term("content", "david");

         //用于保存检索结果

         Hits hits = null;

         //生成FuzzyQuery对象,初始化为null

         FuzzyQuery query = null;

         query = new FuzzyQuery(word1);

         //开始检索,并返回检索结果

         hits = searcher.search(query);

         //输出检索结果的相关信息

         printResult(hits,"与'david'相似的词");

     }

     public static void printResult(Hits hits, String key) throws Exception

         {System.out.println("查找 /"" + key + "/" :");

         if (hits != null) {

             if (hits.length() == 0) {

                 System.out.println("没有找到任何结果");

                 System.out.println();

             } else {

                 System.out.print("找到");

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

                     //取得文档对象

                     Document d = hits.doc(i);

                     //取得“title”字段的内容

                     String dname = d.get("title");

                     System.out.print(dname + "   ");

                 }

                 System.out.println();

                 System.out.println();

             }

         }

     }

}

在上述代码中,首先构建了3个Document,这3个Document的“content”字段中都有一个与“david”较为相似的关键字(其中第一个就是david)。然后使用FuzzyQuery来对其进行检索。

lucene-查询query->FuzzyQuery相近词语的搜索的更多相关文章

  1. Lucene 查询(Query)子类

    QueryParser(单域查询) QueryParser子类对单个域查询时创建查询query,构造方法中需要传入Lucene版本号,检索域名和分词器. QueryParser parser = ne ...

  2. Lucene 查询方式

    QueryParser类 QueryParser类对输入字符串的解析 格    式 含    义 “David” 在默认的字段中检索“David”关键字 “content:David” 在“conte ...

  3. lucene查询解析器语法

    注意:使用QueryParser查询,关键词是会被分词的,如果不需要分词,可以选择使用Lucene提供的API查询类. Lucene提供了丰富的API来组合定制你所需要的查询器,同时也可以利用Quer ...

  4. lucene 查询 (转载)

    原网址:http://hi.baidu.com/lszhuhaichao/blog/item/ccffc7cb858f1514bf09e66f.html Lucene3.0之查询处理(1):原理201 ...

  5. Lucene查询语法详解

    Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...

  6. 【转载】Lucene.Net无障碍学习和使用:搜索篇

    在上一篇中,我们初步理解了索引的增删改查基本操作.本文着重介绍一下常用的搜索,以及搜索结果的排序和分页.本文的搜索主要是基于前一篇介绍的文本文件的索引,建议下载最后改进的demo对照着看阅读本文,同时 ...

  7. lucene 查询的使用

    各种查询方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser查询字符串 ------------------------> Query对象 ...

  8. kibana使用(ELK)、Lucene 查询语法

    Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...

  9. Lucene.Net无障碍学习和使用:搜索篇

    一.初步认识搜索 先从上一篇示例代码中我们摘录一段代码看看搜索的简单实现: private TopDocs Search(string keyword,string field) { TopDocs ...

随机推荐

  1. Gvr SDK for Unity 分析(二)

    前言 关于google vr sdk的具体使用,传送门 Gvr SDK for Unity 分析(一) Google Daydream平台已经整合进Google VR SDK 本文环境:Unity5. ...

  2. webSocket ws协议测试

    最近公司做了个直播的项目,需要用到Websocket进行通信,因而需要对socket最大连接数及稳定性进行测试.当初得到这一需求的时候,唯一想到的就是jmeter,从百度下载相应的socket依赖ja ...

  3. Entityframework core 动态添加模型实体

    重新DBContext中OnModelCreating protected override void OnModelCreating(ModelBuilder modelBuilder)  { // ...

  4. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  5. Linux收集

    1.rsync快速删除文件 rsync --delete -avH /empty /rmdir 选项说明: –delete-before 接收者在传输之前进行删除操作 –progress 在传输时显示 ...

  6. Integer.parseInt(String s) 和 Integer.valueOf(String s) 的区别

    通过查看java.lang.Integer的源码可以发现, 它们最终调用的都是 /** * Parses the string argument as a signed integer in the ...

  7. XAMPP部署

    1,直接从官网上下载,然后安装即可 2,出现的问题: a,启动Apache服务器的时候,出现打开端口失败,原因80号端口已被占用,解决方案,更改config文件,将端口设置为8090 b,给phpmy ...

  8. 产品经理技能之BRD的笔记之菜鸟入门

    链接:http://www.woshipm.com/pmd/178527.html?utm_source=tuicool 要学习MRD.PRD,先从BRD开始,才能做到知其然知其所以然. BRD是什么 ...

  9. 1002. A+B for Polynomials

    1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ...

  10. 柯里化/偏函数/Curring用法

    把接受多个参数的函数变成一个单一参数的函数,并且返回接受余下的参数而有返回结果的新函数的技术 下面我们以实例说明: var toString = {}.toString; var isString = ...