lucene多字段检索
默认情况下,IndexSearcher 类的search 方法返回查询结果时, 是按文档的分值排序的, 可以使用重载的search 方法对结果排序
IndexSearcher.search(Query,Sort);
new Sort() 和 Sort.RELEVANCE, 以及null 一样, 采用默认排序, 要定义排序字段, 方法是将字段传入Sort 对象
Sort sort = new Sort(String field);
也可以对多个字段排序Sort sort = new Sort(String[] fields);
例:
Sort sort = new Sort(new SortField[]{new SortField(“title”),new SortField(“name”)});
Hits hits=searcher.search(query,Sort);
多字段查找MultiFieldQueryParser
只在某些Term 中查找, 不关心在哪个字段
Query query = new MultiFieldQueryParser.parse(“word”,new String[]{“title”,”content”},analyzer); // 在title 和content 中找word
多字段时默认是OR 关系, 要改变它, 使用以下方法:
Query query = MultiFieldQueryParser.parse(“word”,new String[]{“title”,”content”},new int[]{MultiFieldQueryParser.REQUIRED_FIELD,MultiFieldQueryParser.PROHIBITED_FIELD},analyzer);
其中:
REQUIRED_FIELD 表示该条件必须有
PROHIBITED_FIELD 表示必须不含
搜索多个索引文件MultiSearcher
1) 建立多个索引: 使用不同的索引目录, 实例化不同的IndexWriter
2) 建立多索引搜索器:
Searcher[] searchers = new SEARCHER[2];
Searchers[0] = new IndexSearcher(dir1); // 搜索索引目录一
Searchers[1]= new IndexSearcher(dir2);// 搜索索引目录二
Searcher searcher = new MultiSearcher(serarchers);
3) 开始查询:Hits hits = searcher.search(query);
BooleanQuery typeNegativeSearch = new BooleanQuery();
QueryParser parser = new QueryParser("contents", new Analyzer());
parser.setDefaultOperator(QueryParser.AND_OPERATOR);
query = parser.parse(queryString);
QueryParser parser2 = new QueryParser("adISELL", new Analyzer());
query2 = parser2.parse("\"2\"");
QueryParser parser3 = new QueryParser("adISELL", new Analyzer());
query3 = parser3.parse("\"2\"");
QueryParser parser4 = new QueryParser("adISELL", new Analyzer());
query4 = parser4.parse("\"2\"");
QueryParser parser4 = new QueryParser("adISELL", new Analyzer());
query4 = parser4.parse("\"2\"");
QueryParser parser..n = new QueryParser("adISELL", new Analyzer());
query..n = parser..n.parse("\"2\"");
typeNegativeSearch.add(query,Occur.MUST);
typeNegativeSearch.add(query2,Occur.MUST);
typeNegativeSearch.add(query3,Occur.MUST);
typeNegativeSearch.add(query4,Occur.MUST);
.....
typeNegativeSearch.add(query..n,Occur.MUST);
hits = searcher.search(typeNegativeSearch);
1, 几种span 的querySpanTermQuery :检索效果完全同TermQuery ,但内部会记录一些位置信息
,供SpanQuery 的其它API 使用,是其它属于SpanQuery 的Query 的基础。
SpanFirstQuery :查找方式为从Field 的内容起始位置开始,在一个固定的宽度内查找所指定的
词条。
SpanNearQuery :功能类似PharaseQuery 。SpanNearQuery 查找所匹配的不一定是短语,还有可
能是另一个SpanQuery 的查询结果作为整体考虑,进行嵌套查询。
SpanOrQuery :把所有SpanQuery 查询结果综合起来,作为检索结果。
SpanNotQuery :从第一个SpanQuery 查询结果中,去掉第二个SpanQuery 查询结果,作为检索结
果。
2, 多条件索引关系
BooleanClause 用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST ,
BooleanClause.Occur.MUST_NOT ,BooleanClause.Occur.SHOULD 。有以下6 种组合:
1 .MUST 和MUST :取得连个查询子句的交集。
2 .MUST 和MUST_NOT :表示查询结果中不能包含MUST_NOT 所对应得查询子句的检索结果。
3 .MUST_NOT 和MUST_NOT :无意义,检索无结果。
4 .SHOULD 与MUST 、SHOULD 与MUST_NOT :SHOULD 与MUST 连用时,无意义,结果为MUST 子句的检索
结果。与MUST_NOT 连用时,功能同MUST 。
5 .SHOULD 与SHOULD :表示“ 或” 关系,最终检索结果为所有检索子句的并集。
上一篇: springMVC源码分析--@SessionAttribute用法及原理解析SessionAttributesHandler和SessionAttributeStore
下一篇: Android 源码的编译
推荐阅读
-
ElasticStack学习(十):深入ElasticSearch搜索之QueryFiltering、多/单字符串的多字段查询
-
Net Core使用Lucene.Net和盘古分词器 实现全文检索
-
干货 |《从Lucene到Elasticsearch全文检索实战》拆解实践
-
php中单个数据库字段多列显示(单字段分页、横向输出)
-
django admin显示多对多字段ManyToManyField
-
Lucene-----信息检索技术
-
《从Lucene到Elasticsearch:全文检索实战》学习笔记三
-
全文检索-Lucene.net
-
全文检索---lucene学习笔记 有案例
-
hibernate3中 一对多 和多对一的检索策略