azure search 是微软的一项新的云服务。我稍微玩了一下这项服务,现在它是我最喜欢的玩具。在这篇文章中,我将快速概述 azure search 并告诉您它是什么以及不是什么。我还提供了一些关于您需要什么工具以及如何摆脱我在 coreclr 上使用服务时遇到的一些问题的建议。
为什么要使用 Azure 搜索?
首先让我们看一下微软搜索技术的图片以及 Azure 搜索的用武之地。下面是微软构建和提供的服务表。对于所有服务,我还添加了为什么它们不适合自定义搜索场景的解释。
技术 | 描述 | 缺点 |
---|---|---|
桌面搜索 | 支持文件搜索和邮箱搜索,媒体服务也使用。 | 不是为网络场景或大量并行用户构建的。 |
兵 | 网络搜索,旨在从网络中查找网页和文件。 | 从网络索引搜索,没有自定义结构化数据的选项。 |
共享点搜索 | 也许是最强大的企业级搜索解决方案,高度可定制。 | 你的钱可以买到最好的,但它非常昂贵。 |
文档数据库 | nosql 文档数据库由微软构建并在 azure 上作为服务提供。 | 只是一个没有太多搜索语义的数据库。 |
azure search 是拼图中缺失的一块——您可以构建自定义搜索索引,自定义这些索引并从您拥有的任何应用程序的索引中进行搜索。对于较小的负载,Azure 上还提供免费搜索。
Azure 搜索的内部结构
微软使用 elasticsearch 作为 azure 搜索服务背后的搜索引擎。弹性搜索是建立在 lucene 文档数据库之上的免费搜索解决方案。对我们来说,有一个基于 json 的搜索 api,这就是我们的应用程序与搜索服务通信的方式。
注意! 我们的应用程序仅使用 azure search api 提供的内容。我们无法直接访问 api 背后的搜索解决方案,实际上对我们来说,微软实际使用的是什么无关紧要。 azure search 不是云托管的弹性搜索。
天蓝色搜索的功能
以下是 azure search 的一些功能:
- 索引器 ——从 sql azure 或 documentdb 更新搜索索引
- 分面导航 ——在搜索应用程序中提供自主向下钻取导航的过滤机制
- 分页 ——搜索结果可以分页
- 评分配置文件 - 自定义搜索分数计算的 Microsoft Azure 搜索功能,影响项目在搜索结果中的排名方式
- suggesters—— 用于基于搜索的自动完成,例如
- tab boosting—— 基于索引中已有的标签元素可以在结果中获得更高的排名分数
- 语言分析器 ——分析最常涉及断字、文本规范化和过滤术语的字段。
管理搜索服务
我们可以通过 Azure 预览门户管理我们的搜索服务。下面的屏幕截图让您对预期结果有所了解。
并非所有管理选项都可通过预览门户获得——您仍然需要通过直接对 api 的 json 调用来完成一些操作。我希望随着时间的推移,所有这些选项也能找到管理门户的方式。
工具和库
以下是您可以使用的工具和库:
- nuget 上有一个搜索库。它由 Microsoft 开发,您可以在使用完整版 .net 的应用程序中使用它。 注意! 今天这个库在 coreclr 上不受支持。
- 有一个休息客户端,因为有些事情你只能通过 api 来做。例如,有适用于 Firefox 的 restclient 插件。
解决问题
- 如果您的应用程序在 coreclr 上运行,那么您可以通过示例使用 json.net 编写自己的简单搜索客户端。
-
异步运行代码时,我在 visual studio 和 coreclr 上遇到了问题。如果您遇到同样的麻烦,那么
task.wait()
可以解决问题,但不要将此技巧视为解决方案。它仍然是糟糕的黑客攻击,但你可以控制正在发生的事情。 - 由于存在一些硬性限制(您不能更改和删除索引中的现有字段),最好编写一段代码再次填充您的索引。如果您只是使用搜索服务并且您的数据没有管理界面,您可能还需要此代码。
包起来
借助 Azure 搜索,我们现在拥有一个简单的搜索服务,我们可以将其用于自定义数据。我们正在构建什么应用程序并不重要。我们可以从可以访问 Internet 的所有类型的应用程序中使用 Azure 搜索。大多数配置可以通过预览门户完成,但仍有一些事情我们必须直接通过 API 完成。尽管索引有一些限制,但我们仍然可以在生产环境中使用该服务。对于较小的场景,还提供免费版本的搜索服务。