1.  索引——好比字典的索引一样,进行查询时使用

2. Field.Index.NO 则没有索引,则不能被搜索

3.

第三章

PhraseQuery 短语查询

按照顺序添加term

PharseQuery 短语查询的评分:

public class App
{
public static void main( String[] args ) throws IOException, ParseException
{
Directory dir = new RAMDirectory();
IndexWriterConfig conf = new IndexWriterConfig(new WhitespaceAnalyzer());
IndexWriter writer = new IndexWriter(dir, conf);
Document doc = new Document();
doc.add(new TextField("text", "lazy dog jump over cat", Field.Store.YES));
writer.addDocument(doc); doc = new Document();
doc.add(new TextField("text", "lazy haha dog lala jump ooo over this cat", Field.Store.YES));
writer.addDocument(doc); doc = new Document();
doc.add(new TextField("text", "dog lazy haha pig lala jump ooo over this cat", Field.Store.YES));
writer.addDocument(doc); IndexReader reader = DirectoryReader.open(writer, true);
IndexSearcher searcher = new IndexSearcher(reader); // Query query = new MatchAllDocsQuery(); QueryParser parser = new QueryParser("text", new WhitespaceAnalyzer());
parser.setDefaultOperator(Operator.AND);
Query query = parser.parse("\"dog cat\"~5");
System.out.println("query["+query.toString()+"]"); TopDocs hits = searcher.search(query, 10);
System.out.println(hits.totalHits);
ScoreDoc[] docs = hits.scoreDocs;
for(ScoreDoc scoreDoc : docs){
int docID = scoreDoc.doc;
float score = scoreDoc.score;
Document docu = searcher.doc(docID);
System.out.println(docID+" - "+score+" - "+docu.get("text"));
}
}
}

  经测试,

  首先,只返回符合条件的查询结果。如:查找slop=2的,那么项间距大于2的不会被检索到。

  其次,短语查询不是布尔查询。它根据匹配所需要的编辑距离来进行评分。返回的结果中,项之间距离越小,评分越高,排序越靠前

   最后,松散的短语查询不需要按照顺序进行匹配,但是SpanNearQuery能够确保按照顺序匹配。

第四章 分析器

同义词过滤器实现:

直观想法是在有同义词的位置插入同义词,位置增量为0.

实现起来和直观想法不一样,因为TokenStream是流。具体实现的思路是:

incrementToken每一次执行打印一个token, 我们应该是在有同义词的token的下一个token打印出需要插入的同义词。

判断有同义词- 》存储到缓存, 下一次循环 -》先判断缓存是否有需要展示的同义词, 有则打印。

  

  

lucene in action的更多相关文章

  1. 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析

    通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...

  2. 《Lucene in Action第二版》学习总结---如何在Windows下编译luceneinAction2Edition源码包

    1. 下载此源码包,位置是: www.manning.com/hatcher3,得到:lia2e.tar.gz,然后解压缩得到目录:lia2e,为了以后能辨识,我将此目录改名为:luceneinAct ...

  3. 《Lucene in Action》(第二版) 第二章节的学习总结 ---- IndexWriter+Document+Field

    这一章节的学习,主要是学会如何创建索引,使用索引 一.创建索引 1.从原始文件中提取内容.这里的文件,可以是文本文件,也可以是二进制文件.文本文件(txt),lucene可以直接处理:而二进制文件(w ...

  4. 《Lucene in Action》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索

    第一章节是介绍性质,但是通过这一章节的学习,我理解到如下概念: 1.Lucene由两部分组成:索引和搜索.索引是通过对原始数据的解析,形成索引的过程:而搜索则是针对用户输入的查找要求,从索引中找到匹配 ...

  5. Lucene in action 笔记 term vector——针对特定field建立的词频向量空间,不存!不会!影响搜索,其作用是告诉我们搜索结果是“如何”匹配的,用以提供高亮、计算相似度,在VSM模型中评分计算

    摘自:http://makble.com/what-is-term-vector-in-lucene given a document, find all its terms and the posi ...

  6. 《Lucene in Action 第二版》第三章节的学习总结----IndexSearcher以及Term和QueryParser

    本章节告诉我们怎么用搜索.通过这章节的学习,虽然搜索的内部原理不清楚,但是至少应该学会简单的编写搜索程序了本章节,需要掌握如下几个主要API1.IndexSearcher类:搜索索引的门户,发起者. ...

  7. Lucene的分析资料【转】

    Lucene 源码剖析 1 目录 2 Lucene是什么 2.1.1 强大特性 2.1.2 API组成- 2.1.3 Hello World! 2.1.4 Lucene roadmap 3 索引文件结 ...

  8. 【手把手教你全文检索】Apache Lucene初探

    PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...

  9. Apache Lucene学习笔记

    Hadoop概述 Apache lucene: 全球第一个开源的全文检索引擎工具包 完整的查询引擎和搜索引擎 部分文本分析引擎 开发人员在此基础建立完整的全文检索引擎 以下为转载:http://www ...

随机推荐

  1. HDU 4582 DFS spanning tree(DFS+贪心)(2013ACM-ICPC杭州赛区全国邀请赛)

    Problem Description Consider a Depth-First-Search(DFS) spanning tree T of a undirected connected gra ...

  2. 学习MVC中出现的一个BUG

    BUG描述:No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.S ...

  3. symfony安装总结

    将D:\ApacheServer\php路径添加到环境变量path中,在cmd命令行中可以执行php命令 打开php.ini 打开extension=php_openssl.dll file_put_ ...

  4. feof问题

    feof()函数是我们C语言中操作文件常见的函数,也是我们最容易出错的函数 这个函数用来表示文件指针是否已经到了文件末尾的下一个位置.这个函数是通用的 可以用在文本文件和二进制文件 (EOF是文件结束 ...

  5. spring笔记(三)

    Spring 第二天: 1. 代理模式 2. Aop编程 3.Spring对Jdbc的支持 JdbcTemplate工具类 思考: 程序的“事务控制”, 可以用aop实现! 即只需要写一次,运行时候动 ...

  6. Hibernate常用方法之_删除

    1.使用session的delete方法 public void deleteUser(User user){ Session session = null; Transaction transact ...

  7. BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)

    注意到模数很小,容易想到使用卢卡斯定理,即变成一个2333进制数各位组合数的乘积.对于k的限制容易想到数位dp.可以预处理一发2333以内的组合数及组合数前缀和,然后设f[i][0/1]为前i位是否卡 ...

  8. bzoj

    准确率爆棚啊,然而

  9. 注意@Bean中的initMethod和destroyMethod

    @Configuration public class AppConfig { @Bean(initMethod = "init") public Foo foo() { retu ...

  10. 排序(bzoj 4552)

    Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...