博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
艾伟_转载:Lucene.net多字段多索引目录搜索
阅读量:6370 次
发布时间:2019-06-23

本文共 1325 字,大约阅读时间需要 4 分钟。

Lucene.net是目前在.net环境中被普遍使用的全文索引的开源项目,这次在项目的开发中也使用它进行全文索引。

在开发过程中碰到一些小问题就是对多字段和多索引目录进行搜索。

1、多字段搜索就是同时要一个以上的字段中的内容进行比较搜索,类似概念在SQL中就是select * from Table where a like '%query%' or b like '%query%'。

Lucene.net中的单个字段查询大家都比较熟悉,这里对字段content进行搜索

 
Query query
=
QueryParser.Parse(querystr,
"
content
"
,
new
ChineseAnalyzer());
Hits hits
=
searcher.Search(query);

 

对多个字段查询用到一个MultiFieldQueryParser对象,该对象继承自Query,我们要对字段title,content进行搜索。

 
string
[] fields
=
{
"
content
"
,
"
title
"
};
Query multiquery
=
MultiFieldQueryParser.Parse(querystr,fields,
new
ChineseAnalyzer());
Hits hits
=
searcher.Search(multiquery);

 

2、多索引目录就是要在多个索引目录的中进行比较搜索,类似概念在SQL中就是select * from TableA union select * from TableB。

 
IndexSearcher[] searchers
=
new
IndexSearcher[
2
];
searchers[
0
]
=
new
IndexSearcher(IndexPath0);
searchers[
1
]
=
new
IndexSearcher(IndexPath1);
MultiSearcher multisearcher
=
new
MultiSearcher(searchers);
TopDocs multitopdocs
=
multisearcher.Search(query,
null
,
1000
);

 

这个搜索的结果可能有相同的信息,比如你有一条相同的信息在多个目录中索引,搜索的结果就会出现多次相同的信息。

还有一种搜索方式是用到ParallelMultiSearcher这个对象,它是从MulitSearcher继承而来。

 
ParallelMultiSearcher parallelmultisearcher
=
new
ParallelMultiSearcher(searchers);
TopDocs paralleltopdocs
=
parallelmultisearcher.Search(query,
null
,
1000
);

 

这个搜索是对搜索后的结果进行合并,剔除重复的信息。

转载于:https://www.cnblogs.com/waw/archive/2011/08/29/2157033.html

你可能感兴趣的文章
MongoDB 分组统计
查看>>
二进制状态码
查看>>
Vue 中 CSS 动画原理
查看>>
关于 Promise 的 9 个提示
查看>>
算法复习
查看>>
安卓中高级开发面试知识点之——缓存
查看>>
Java的初始化顺序
查看>>
js 判断回文字符串
查看>>
shields小徽章是如何生成的?以及搭建自己的shield服务器
查看>>
猫头鹰的深夜翻译:spring事务管理
查看>>
记一次使用Spring REST Docs + travis + github自动生成API接口文档的操作步骤(下)...
查看>>
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>
Laravel优秀扩展包整理
查看>>
日志分析之识别真假蜘蛛与处理办法
查看>>
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
卢森堡大学发布RepuCoin系统,可破解区块链51%攻击
查看>>