Lucene学习总结-高级查询

本文深入探讨了Elasticsearch中排序机制与查询技术,包括如何使用Fieldcache进行排序,Sort方法实现不同字段的排序,以及如何利用MultiPhraseQuery进行多条件查询。同时,文章还介绍了如何设置查询范围、过滤条件以及实现远程查询和多索引搜索等功能。通过实践案例,读者能够掌握Elasticsearch中排序与查询的高效应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Field cache:在一个IndexReader生命周期内,用于排序。

Sort:Sort.RELEVANCE,Sort.INDEXORDER,按照Field排序new Sort("category"),升序new Sort("pubmonth", true),

IndexSearcher searcher = new IndexSearcher(directory);
TopDocs results = searcher.search(query, null, 20, sort);

多个Field排序:

new Sort(new SortField[]{
new SortField("category"),
SortField.FIELD_SCORE,
new SortField("pubmonth", SortField.INT, true)
})

MultiPhraseQuery:类似于PhraseQuery,可以设置多个短语的查询。

MultiPhraseQuery query = new MultiPhraseQuery();
query.add(new Term[] { // #1
new Term("field", "quick"), // #1
new Term("field", "fast") // #1
});
query.add(new Term("field", "fox"));
TopDocs hits = searcher.search(query, 10);
query.setSlop(1);
hits = searcher.search(query, 10);

SpanTermQuery:没神马特殊。

SpanFirstQuery:从开头开始的n个term包含查询项。

SpanFirstQuery sfq = new SpanFirstQuery(brown, 2);

SpanQuery,不能用QueryParser。

过滤查询:

String jan1 = TestUtil.parseDate("2004-01-01");
String jan31 = TestUtil.parseDate("2004-01-31");
String dec31 = TestUtil.parseDate("2004-12-31");
RangeFilter filter = new RangeFilter("modified", jan1, dec31, true, true);
Filter filter = new FieldCacheTermsFilter("pubmonth",new String[] {"199910","200406"});
TermQuery categoryQuery = new TermQuery(new Term("category", "/philosophy/eastern"));
Filter categoryFilter = new QueryWrapperFilter(categoryQuery);
Filter prefixFilter = new PrefixFilter(new Term("pubmonth", "19"));

MultiSearcher:

MultiSearcher searcher = new MultiSearcher(searchers);
// range spans documents across both indexes
RangeQuery query = new RangeQuery("animal", "h", "t", true, true);// #3
query.setConstantScoreRewrite(true);
TopDocs hits = searcher.search(query, 10);

ParallelMultiSearcher:

远程查询:

LocateRegistry.createRegistry(1099);
Searchable[] searchables = new Searchable[ALPHABET.length()];
Searcher multiSearcher = new MultiSearcher(searchables);
RemoteSearchable multiImpl = new RemoteSearchable(multiSearcher);
Naming.rebind("//localhost/LIA_Multi", multiImpl);
Searcher parallelSearcher = new ParallelMultiSearcher(searchables);
RemoteSearchable parallelImpl = new RemoteSearchable(parallelSearcher);
Naming.rebind("//localhost/LIA_Parallel", parallelImpl);

TermFreqVector:

FieldSelector:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值