艾伟_转载:Lucene.net多字段多索引目录搜索

简介: Lucene.net是目前在.net环境中被普遍使用的全文索引的开源项目,这次在项目的开发中也使用它进行全文索引。在开发过程中碰到一些小问题就是对多字段和多索引目录进行搜索。1、多字段搜索就是同时要一个以上的字段中的内容进行比较搜索,类似概念在SQL中就是select * from Table where a like '%query%' or b like '%query%'。

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 );

 

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

目录
相关文章
|
6月前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
108 0
|
27天前
|
自然语言处理 Java API
推荐3款卓越的 .NET 开源搜索组件库
推荐3款卓越的 .NET 开源搜索组件库
|
3月前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
|
3月前
|
程序员 数据库
分享 2 个 .NET EF 6 只更新某些字段的方法
分享 2 个 .NET EF 6 只更新某些字段的方法
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
119 0
|
5月前
|
存储 安全 Unix
【.Net Core】深入理解IO之文件和目录
【.Net Core】深入理解IO之文件和目录
54 4
|
C#
.net core 删除指定路径下的所有文件以及文件夹(文件夹建议保留目录)
1、服务层 ```csharp /// <summary> /// 删除指定路径下的所有文件 /// </summary> /// <param name="filepath">指定路径</param> /// <returns></returns> public string DeleteSpecifiedPathAllFile(string filepath) { try { DirectoryInfo info = new DirectoryInfo(filepath); // 去除文件夹的只读属性 info.Attribu
132 0
|
存储 C#
【.Net底层剖析】2.stfld指令-给对象的字段赋值
【.Net底层剖析】2.stfld指令-给对象的字段赋值
157 0
【.Net底层剖析】2.stfld指令-给对象的字段赋值
|
开发框架 .NET
ASP.NET Core添加静态目录访问、是其他目录可被访问
ASP.NET Core添加静态目录访问、是其他目录可被访问
154 0
ASP.NET Core添加静态目录访问、是其他目录可被访问
|
前端开发 程序员
.NET-记一次架构优化实战与方案-目录
.NET-记一次架构优化实战与方案-目录
118 0
下一篇
无影云桌面