计划研究一下搜索search,然后写个学习过程系列博客。开动之前先说说学习搜索的目的:不是想开发个什么搜索引擎,而是想用现成的搜索引擎在传统信息系统中引进搜索的概念和方法。对我来说,传统的管理系统legacy i.t system已经走到了尽头。根本原因是信息在量上的爆发增长,传统数据管理方式已经无法兼顾了。在我看来,除了交易管理,传统的关系数据库方式在业务管理的其它方面,特别是业务相关的数据分析、决策支持等肯定是力不从心了,这些从持续多年我所经历的数据库红色锁标记就很有说服力了。无可否认,必须想办法在大数据、分布式计算方面寻找合适的解决方案。前两年已经完成了一系列分布式计算、分布式数据库,分布式流处理等博客,足够构建一个分布式大数据平台来实现对海量数据的存储、处理了。剩下最重要的问题是如何使用平台上的这些数据,即如何能轻松又高效的使用大数据,否则前面一切努力将化为乌有。现在最迫切的需求(我认为的)就是如何对这些大数据进行高效的分析、关联,组合然后产生全面、精准的业务决策或者系统使用的支持数据。也就是说可以通过搜索把大数据平台上的数据按照业务管理要求的信息内容、表现形式提供给前端系统。

首先解释一下:传统业务管理系统里的查询(查找)与搜索有较大区别。传统系统采用查询方式来筛选系统里符合条件的交易记录。之所以提到交易记录是因为传统系统中数据的强格式化,连带查询条件的设置也较僵化、缺乏灵活性。由于查询结果是通过对查询条件的高度匹配产生的,往往需要查询者充分了解业务特性才能准确的表述需求形成条件,这也是大多数操作者无法具备的能力,造成查询工具的实用性大打折扣。

搜索search除条件匹配式的查找外最重要的是具备了关联relevance的特性。首先,搜索是基于大数据文件数据库的,对格式没有硬性要求,操作者可自由、灵活的表达搜索条件。再者搜索具备信息关联能力,能根据搜索条件除符合条件的文件外,还能把满足搜索条件中表述的关联,如:文字关联、意思关联、信息关联等应用在目标文件的匹配上,产生一个以关联度排序的结果文件清单。换句话说就是好的1搜索方案还可以猜度操作者的搜索目的,提供建议目标结果。如此大大降低了对使用者操作水平的要求,最终任何用户普遍都可以轻松使用搜索来获取符合专业要求的搜索结果。

考虑了一下市面上的几个开源搜索引擎,最终选择了elasticsearch。除了搜索功能外,elasticsearch还是一个分布式的数据库。当然,我们不会采用elasticsearch的数据库存取功能,因为已经选择了mongodb作为大数据平台数据库。所以,最终的系统结构是一个mongodb+elasticsearch的搜索平台:mongodb存储原始业务数据,elasticsearch负责对这些业务数据进行索引构建。

从结构上说:elasticsearch的操作可以分为后台批次型的索引构建(indexing)及前端实时的索引管理及搜索,包括对索引的CRUD,这些是通过elasticsearch提供的api来实现的。如上所述,elasticsearch也是某种数据库管理系统,提供了多种语言的客户端驱动,包括java。但后面我们会用elastic4s:一个开源的scala elasticsearch客户端,根据各种业务搜索场景,调用elasticsearch的各种api来实现行业专用的搜索功能。

search(0)- 企业搜索,写在前面的更多相关文章

  1. SOLR搭建企业搜索平台

    一. SOLR搭建企业搜索平台  运行环境:  运行容器:Tomcat6.0.20  Solr版本:apache-solr-1.4.0  分词器:mmseg4j-1.6.2  词库:sogou-dic ...

  2. 用weexplus从0到1写一个app

    说明 基于wexplus开发app是来新公司才接触的,之前只是用过weex体验过写demo,当时就被用vue技术栈来开发app的开发体验惊艳到了,这个开发体验比react native要好很多,对于我 ...

  3. lucene7.1.0实现搜索文件内容

    Lucene的使用主要体现在两个步骤: 1 创建索引,通过IndexWriter对不同的文件进行索引的创建,并将其保存在索引相关文件存储的位置中. 2 通过索引查寻关键字相关文档. 首先,我们需要定义 ...

  4. 【LeetCode-面试算法经典-Java实现】【079-Word Search(单词搜索)】

    [079-Word Search(单词搜索)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a 2D board and a word, find if ...

  5. 用weexplus从0到1写一个app(2)-页面跳转和文章列表及文章详情的编写

    说明 结束连续几天的加班,最近的项目终于告一段落,今天抽点时间开始继续写我这篇拖了很久的<用weexplus从0到1写一个app>系列文章.写这篇文章的时候,weexplus的作者已经把w ...

  6. 亚马逊云推出基于机器学习的企业搜索服务Kendra,剑指微软

    近日,在AWS re:Invent全球大会上,亚马逊发布了五项新的基于机器学习的人工智能 (AI) 服务. 这五项服务包括机器学习驱动的企业搜索.代码审核与分析.欺诈检测.医疗转录和 AI 预测的人工 ...

  7. 【大咖直播】Elastic 企业搜索实战工作坊(第一期)

    借助 App Search 提供的内置功能,您可轻松打造卓越的搜索体验.直观的相关度调整以及开箱即用的搜索分析,不仅可以优化所提供的内容,其提供的 API 还可帮助您将位于各处的所有内容源关联在一起. ...

  8. 【大咖直播】Elastic 企业搜索实战工作坊(第二期)

    借助 App Search 提供的内置功能,您可轻松打造卓越的搜索体验.直观的相关度调整以及开箱即用的搜索分析,不仅可以优化所提供的内容,其提供的 API 还可帮助您将位于各处的所有内容源关联在一起. ...

  9. Beam Search(集束搜索/束搜索)

    找遍百度也没有找到关于Beam Search的详细解释,只有一些比较泛泛的讲解,于是有了这篇博文. 首先给出wiki地址:http://en.wikipedia.org/wiki/Beam_searc ...

  10. iphone H5 input type="search" 不显示搜索 解决办法

    H5 input type="search" 不显示搜索 解决办法 H5 input type="search" 不显示搜索 解决方法 在IOS(ipad iP ...

随机推荐

  1. NSCTF-Reverse02 超级详细且简单的办法搞定

    没有壳 VC写的 观察界面 一个编辑框 一个按钮 拖进IDA 在导入表里找到GetDlgItemTextA 为什么找这个函数 因为这个函数的作用就是 获取我们输入编辑框的内容 双击进入 ctrl+X ...

  2. selenium常见的元素定位方法

    一.获取元素 1)通过谷歌浏览器自动的工具访问百度首页,我们可以看到,页面上的元素都是由一行行的代码组成的,它们之间有层级地组织起来,每个元素之间都有不同的标签和值,我们可以通过这些不同的标签和值来找 ...

  3. C#反射与特性(九):全网最全-解析反射

    目录 1,判断类型 1.1 类和委托 1.2 值类型 1.3 接口 1.4 数组 2, 类型成员 2.1 类 2.2 委托 2.3 接口 [微信平台,此文仅授权<NCC 开源社区>订阅号发 ...

  4. x01.auto_input: 自动输入

    单位经常要把 excel 表的数据录入系统中,能够自动录入该多好. 花了几天时间,学习了一下 pandas 操作 excel 数据,利用 pyautogui 完成了一个自动录入的小测试,希望对有此需求 ...

  5. ROS之服务

    服务(service)是另一种在节点之间传递数据的方法,服务其实就是同步的跨进程函数调用,它能够让一个节点调用运行在另一个节点中的函数. 我们就像之前消息类型一样定义这个函数的输入/输出.服务端(提供 ...

  6. 痞子衡嵌入式:Ethos-U55,ARM首款面向Cortex-M的microNPU

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Ethos-U55. ARM 前几天刚发布了 Cortex-M 家族最新一款内核 - Cortex-M55 以及首款面向 Cor ...

  7. [web]2019第一起数据泄露事件

    -rwxrwxrwx 33405108 Jan 22 2016 000webhost.txt -rwxrwxrwx 165025 Jul 29 2017 01nii.ru {1.931} [HASH] ...

  8. Codeforces 1087B Div Times Mod(数学+暴力)

    题意: 求(x div k) * (x mod k) = n的最小解x,保证有解 1<=n<=1e6, k<=1000,1s 思路: 注意到k的范围是1e3, 1<=x mod ...

  9. 【redis】-- redis的持久化(作为数据库)

    目录 1.RDB rdb持久化的方式 rdb方式的优点: aof的优点 3.持久化的其他特性 日志重写 工作原理 rdb和aof混合使用 redis是一个基于内存的数据库,故在redis正在运行的数据 ...

  10. python如何删除二维或者三维数组/列表中某维的空元素

    如题,个人在使用python进行数据预处理过程中出现的问题,抽象成删除三维列表中某维为空的问题. 一.首先来看一下三维数组/列表的结构 仔细看下图就会很清楚了: 轴0即是去除第一个外括号后第一层(我把 ...