.net-core - 如何使用 .net-core 通过文件(如对 Windows 搜索平台的查询)执行搜索?
问题描述
我需要按文件名和内容搜索文件。当前实现使用 Ole DB 连接到 Windows 搜索。但据我了解,Ole db 不会在 .net 核心中实现。我想我应该使用像Lucene这样的解决方案。所以我需要建议,如何至少从 .net-core 访问 Windows 搜索,或者如何在没有 Windows 搜索的情况下以跨平台方式进行访问。
解决方案
你基本上有几个选择。您可以在 Windows 7 SDK 中获取 FTQuery 工具 (FTQuery.exe),并使用 System.Diagnostics 中的 Process Class 通过解析标准输出来获取结果。
或者,您可以创建一个单独的 ASP.NET Web API 2 项目来充当 Windows Search 和 .NET Core 之间的桥梁,使用以下代码作为控制器中的操作。
public async Task<IHttpActionResult> Post()
{
var data = new ArrayList();
var conn = new OleDbConnection("Provider=Search.CollatorDSO;Extended Properties='Application=Windows'");
await conn.OpenAsync();
string sql = await Request.Content.ReadAsStringAsync();
var cmd = new OleDbCommand(sql, conn);
using (var rdr = await cmd.ExecuteReaderAsync(CommandBehavior.CloseConnection))
{
while (await rdr.ReadAsync())
{
var row = new Dictionary<string, object>();
for (int i = 0; i < rdr.FieldCount; i++)
{
if (!rdr.IsDBNull(i))
row.Add(rdr.GetName(i), rdr.GetValue(i));
}
data.Add(row);
}
}
return Json(data);
}
推荐阅读
- c++ - clang 和 gcc 不实现 std::hardware_{constructive, destroyive}_interference_size 的原因是什么?
- javascript - 选择不同的值时 setInterval 无法正常工作
- build - 自托管构建代理花费太多时间来成功运行作业
- sql - 用于在 SSRS 报告中显示动态日期范围变化的 Visual Basic 代码
- android - 使用命令行工具设置颤振的问题
- java - Java 如何为 addDeserializer 创建扩展 SimpleModule 的模块类?
- django - 在模板中侦听的 Django ManyToMany 查询
- javascript - JS查询未定义
- oracle11g - oracle 数据库 19c - 将 [rolename] 授予 [user] 错误 ORA-01917: 用户或角色不存在
- android - Android Firebase Crashlytics NDK 回溯缺少帧