问题:
使用中科院的中文分词对“中华人民共和国” 进行索引,它被分词为"中华", "人民", "共和国",用“人民共和国”进行搜索,可以搜到,而搜索"中华共和国"却搜索不到,用“中华 AND 共和国”却可以搜出来,为什么?
回答:
我下载了http://ictclas.org/Download.html中科院的词做了简单的分析,如果索引的时候“中华人民共和国”被分成了“中华”“人民”“共和国”,而搜索的时候,搜“中华共和国”,则被分为了“中华 共和国”,然而构建Query Parser构建Query Object的时候,却将它构建成了PhraseQuery—— contents:"中华 共和国" ,而非BooleanQuery——contents:中华 contents:共和国,根据PhraseQuery的解释,它有一个参数slop来表示两个词之间的距离,默认为0,也即只有在文档不但包含“中华”而且包含“共和国”并且二者相邻的时候才能返回。这就是为什么“人民共和国”可以搜出来(它构建的是PhraseQuery,但是相邻),“中华 AND 共和国”能搜索出来(它构建的是BooleanQuery),而“中华共和国”搜不出来的原因(它构建的是PhraseQuery,但不相邻)。
尝试解析Query query = parser.parse("\"中华共和国\"~1")
或者用API设置Slop为1,就能搜索出结果了。
Query query = parser.parse("中华共和国"); PhraseQuery pquery = (PhraseQuery)query; pquery.setSlop(1); |
实例:
Analyzer ca = new ChineseAnalyzer();
QueryParser parser = new QueryParser(field, ca);
Query query1 = parser.parse("人民共和国");
System.out.println("Searching for: " + query1.toString(field));
查询对象为:
query1 PhraseQuery (id=39) boost 1.0 field "contents" maxPosition 1 positions ArrayList<E> (id=45) slop 0 terms ArrayList<E> (id=49) elementData Object[4] (id=74) [0] Term (id=76) field "contents" text "人民" [1] Term (id=77) field "contents" text "共和国"
|
相当于查询语句:
Query query2 = parser.parse("中华 AND 共和国");
System.out.println("Searching for: " + query2.toString(field));
查询对象为:
query2 BooleanQuery (id=43) boost 1.0 clauses ArrayList<E> (id=56) elementData Object[10] (id=57) [0] BooleanClause (id=59) occur BooleanClause$Occur (id=62) name "MUST" query TermQuery (id=65) boost 1.0 term Term (id=70) field "contents" text "中华" [1] BooleanClause (id=61) occur BooleanClause$Occur (id=62) name "MUST" query TermQuery (id=64) boost 1.0 term Term (id=68) field "contents" text "共和国"
|
相当于查询语句:
Query query3 = parser.parse("\"中华共和国\"~1");
System.out.println("Searching for: " + query3.toString(field));
查询对象为:
query3 PhraseQuery (id=54) boost 1.0 field "contents" maxPosition 1 positions ArrayList<E> (id=93) slop 1 terms ArrayList<E> (id=94) elementData Object[4] (id=96) [0] Term (id=97) field "contents" text "中华" [1] Term (id=98) field "contents" text "共和国"
|
相当于查询语句:
Searching for: "中华 共和国"~1 |
Query query4 = parser.parse("中华共和国");
PhraseQuery pquery = (PhraseQuery)query4;
pquery.setSlop(1);
System.out.println("Searching for: " + query4.toString(field));
查询对象为:
query4 PhraseQuery (id=55) boost 1.0 field "contents" maxPosition 1 positions ArrayList<E> (id=102) slop 1 terms ArrayList<E> (id=103) elementData Object[4] (id=105) [0] Term (id=107) field "contents" text "中华" [1] Term (id=108) field "contents" text "共和国"
|
相当于查询语句:
Searching for: "中华 共和国"~1 |
分享到:
相关推荐
3. **文档(Document)**: 在Lucene中,每个要搜索的信息被视为一个Document,包含多个Field,如标题、内容、作者等。 4. **字段(Field)**: Field是文档的组成部分,每个字段有特定的属性,如是否存储原始值、...
1. 断点续搜:Lucene 3.6支持断点续搜,即在搜索过程中可以暂停并保存状态,之后继续搜索,这对于处理大规模数据非常有用。 2. 基于内存的缓存:为了提高搜索效率,Lucene允许在内存中缓存部分索引,如...
总之,Lucene作为Java全文搜索的基石,提供了强大的功能和灵活性,可以帮助开发者构建高效、精准的搜索功能,无论是简单的关键词搜索还是复杂的模糊和智能查询,都能游刃有余地应对。结合"用户管理手册.docx"的学习...
### 利用Lucene实现高级搜索的关键知识点 #### Lucene简介 Lucene是Apache软件基金会下的一个开源全文检索库,提供了高性能的文本搜索能力。它不仅适用于网站的搜索功能,还可以用于任何需要文本搜索的应用场景,如...
Lucene是一个高性能、全文本搜索库,它提供了一个强大的文本检索框架,使得开发者能够为他们的应用程序添加高级搜索功能。多短语搜索是指在查询中包含两个或更多相邻词的短语,它比单个词的搜索更为精确,有助于用户...
在IT领域,搜索引擎技术是不可或缺的一部分,而Apache Lucene是一个高性能、全文本搜索库,它为开发者提供了构建自定义搜索引擎应用程序所需的所有工具。本篇我们将深入探讨如何在Lucene中实现模糊搜索,以及相关的...
通过以上分析,我们可以看出这个“Lucene 高级搜索项目”全面覆盖了Lucene的核心技术,从基础的索引创建到复杂的附件搜索和全文搜索,再到插件开发和Solr的使用,为学习和实践Lucene提供了丰富的素材。
**Lucene 搜索引擎实现详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会维护。...无论是在网站、应用还是大数据环境中,Lucene 都能以其高效的全文检索能力,为用户提供快速、准确的搜索结果。
全文检索与数据库中的LIKE关键字查询不同,LIKE虽然能进行模糊匹配,但其结果可能不准确,没有相关度排序,且效率较低。 【Lucene简介】 Lucene是一个由Java编写的高性能、可扩展的全文搜索引擎库。它提供了一种...
### Lucene全文搜索知识点概述 ...无论是站内搜索还是垂直搜索,Lucene都能提供出色的表现。通过本文档的学习,你可以深入了解全文检索的基本原理、Lucene的工作机制以及如何构建自己的全文搜索应用程序。
总之,Lucene在C#中的时间区间搜索是通过构建和执行RangeQuery来实现的,这涉及到索引构建、查询解析、时间值的转换和比较等多个环节。合理地利用这些技术,可以有效地提升数据检索的效率和准确性。在实际应用中,还...
在信息技术领域,搜索引擎的构建是不可或缺的一部分,而Apache Lucene是一个高性能、全文本搜索库,它为开发者提供了强大的文本检索功能。本文将聚焦于Lucene中的短语搜索,一种能精确匹配多个词汇顺序的搜索方法。...
lucene 近实时搜索 很清楚的解释了关于lucene近实时搜索的代码。很值得学习
Lucene可以被嵌入到各种应用中,为它们添加全文索引和搜索功能。这个库不仅包含了对文本的索引,还提供了高效的搜索算法,使得用户可以快速地查找和定位到相关的文档或内容。 在这个"ssh+lucene搜索实例"中,我们...
### 基于Lucene的搜索策略研究 随着信息技术的发展和社会信息化程度的加深,人们面临着海量数据的管理和检索挑战。如何高效地从大量的文档中找到所需的信息成为了亟待解决的问题。在这种背景下,Lucene作为一种开源...
当用户输入查询时,Lucene会快速定位到包含这些查询词的文档,从而提供高效的搜索性能。 对于中文搜索,Lucene需要处理中文分词问题。中文不同于英文,单词之间没有明显的分隔符,因此需要借助中文分词器(如jieba...
**全文搜索-Lucene** Lucene 是一个开源的全文搜索引擎库,由 Apache 软件基金会维护。它提供了高效的、可扩展的全文检索功能,被广泛应用于各种 Web 应用、内容管理系统以及数据挖掘项目中。Lucene 实现了索引和...
《深入探索Lucene5:拼音搜索的实现与应用》 Lucene是一个强大的全文搜索引擎库,广泛应用于各种信息检索系统中。在Lucene5版本中,它不仅提供了基础的文本搜索功能,还支持了拼音搜索,这极大地提高了中文搜索的...
《Lucene.Heritrix:开发自己的搜索引擎(第2版)》是一本深入探讨如何构建搜索引擎的专业书籍,作者是邱哲。这本书详细介绍了利用Apache Lucene和Heritrix这两个强大的开源工具来创建自定义搜索引擎的技术和策略。 ...