公司最近在研究多条件组合查询方案,Google的一位技术专家Sam和我们讨论了几个备选方案。

Sam的信:

我做了进一步研究,目前有这么几种做法:

1) 最直接粗暴,只做一个主index,比如按行业+地区做一个index,这样来说的话,无论多少个标签的查询,直接先用主index做一个筛选,这样下来可能只有少于10w个row,然后对这10w个一个个filtering,这种做法可能能够满足大部分需求。当然,这种做法需要用到cache来优化,否则每次都去DB load会影响数据库的performance。但是初期直接使用数据库做查询也不是不可以。(这取决于数据量和查询的频率)。

2)使用淘宝的做法, 这种做法是自己来做indexing然后merge,是最强大的,但是开发上可能需要时间较长。

3)使用search engine。我昨天碰上airbnb的一个工程师,正好是做搜索的,他们最开始就是使用的方式1),每个search用邮编filter后其实没有多少房子,所以最简单,后来改用了search engine能提供更多功能。http://www.solrtutorial.com/solr-in-5-minutes.html 是一个简单的tutorial,做一个prototype应该很快(一天?)。http://www.solrtutorial.com/solr-query-syntax.html 是solr engine的查询语法。也能支持 范围查询(比如,消费能力是150元到300元之间)

当然,从原理上来说,2)和3)其实是一样的,多个index的数据集做集合运算。不过3)是在2)上面包了一层。

上面是我的研究结果,供你们参考。

我的回信:

嗨,Sam:

你好!

上封邮件中提到的方案三,收到邮件后我就开始在基于Cloudera的Solr组件做原型验证。

如下例子中拿call客记录当源数据:

{"callSeconds":31,"phone":"189xxxxxxxx","callTime":1480398756000,"callerName":"张三","audioPath":"CB01216021100259_5791b1d70cf2c74aa63c0c25_18968168005_20161129135204.3gpp","canAssign":true,"intent":"B类接通无需求","id":"583d17a444f4f4cb88e3c778","callerId":"57a0678b44f468afd0ee0bac","account":"恒大","strId":"583d17a444f4f4cb88e3c778","merchantId":"5791b1d70cf2c7a4aa63c0c25"}

对每个字段都建索引,用Cloudera的图形化工具Hue可以连到solr查询数据和图表:

Filter过滤以及柱状图,折线图,饼图等主要展示形式都有,其他的还有几个功能暂时还没有用到。

例如查询某caller客的所有去电的意向分布情况:

先找出CallerId=57a0678b44f468afd0ee0bac的记录,再按intent查饼图。

待解决问题:

1.新增字段,新增Tag

新增字段:可以用DynamicFileds在导入数据的时候动态新增索引字段。

新增Tag:每个标签作为一个DynamicFileds

2.历史数据和Kafka中的实时数据导入Solr

实时数据:

1)Kafka消费+SolrJ写入。(需要启额外进程)

2)Kafka+Flume+Morphline。(需定制实现一个Morphline)

方案2)比较好的点是由集群保证鲁棒性。

历史数据:原始数据先导入到HDFS,CDH有工具支持Spark/MapReduce+Morphline导HDFS数据到Solr。

(作者:卡尔 http://www.cnblogs.com/arli)

Solr实战:使用Hue+Solr实现标签查询的更多相关文章

  1. Solr系列六:solr搜索详解优化查询结果(分面搜索、搜索结果高亮、查询建议、折叠展开结果、结果分组、其他搜索特性介绍)

    一.分面搜索 1. 什么是分面搜索? 分面搜索:在搜索结果的基础上进行按指定维度的统计,以展示搜索结果的另一面信息.类似于SQL语句的group by 分面搜索的示例: http://localhos ...

  2. Solr高效利用:Solr实现SQL的查询与统计

    1.如何高效使用Solr查询功能 ?2.单个字段分组统计如何实现? 3.IN条件查询有几种方式? 4.多个字段分组统计是否只支持count? Cloudera公司已经推出了基于Hadoop平台的查询统 ...

  3. Solr 01 - 什么是Solr + Solr安装包目录结构说明

    目录 1 Solr概述 1.1 Solr是什么 1.2 Solr与Lucene的区别 2 Solr文件说明 2.1 Solr的目录结构 2.2 其他常用概念说明 2.3 创建基础文件目录 2.4 so ...

  4. Solr学习笔记---部署Solr到Tomcat上,可视化界面的介绍和使用,Solr的基本内容介绍,SolrJ的使用

    学习Solr前需要有Lucene的基础 Lucene的一些简单用法:https://www.cnblogs.com/dddyyy/p/9842760.html 1.部署Solr到Tomcat(Wind ...

  5. Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)

    一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...

  6. Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)

    一.Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段.字段的数据类型.字段该索引存储. 2. Schema 的定义方式 ...

  7. Solr系列一:Solr(Solr介绍、Solr应用架构、Solr安装使用)

    一.前言 前面已经学习了Lucene的分词.索引详解.搜索详解的知识,已经知道开发一个搜索引擎的流程了.现在就会有这样的一个问题:如果其他的系统也需要使用开发的搜索引擎怎么办呢?这个时候就需要把开发的 ...

  8. Solr学习笔记(1) —— Solr概述&Solr的安装

    一.概述 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序. 1.1 实现方法 在一些大型门户网站.电子商务网站等都需要站内搜索功能,使用传统 ...

  9. Solr和Spring Data Solr

    一.Solr概述与安装 1.Solr简介 Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的.Solr可以和Had ...

随机推荐

  1. Linux下常见的IO模型

    前言 阻塞IO(blocking IO) 非阻塞IO(nonblocking IO) IO复用(IO multiplexing) 异步IO(asynchronous IO (the POSIX aio ...

  2. TSQL 字符串函数:截断和查找

    字符串截断函数是指:Stuff 和 SubString,字符串查找函数是:CharIndex 和 PatIndex 一,SubString 截取子串 最常用的字符串函数,用于截取特定长度的子串. SU ...

  3. HTML5 之拖放(drag与drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...

  4. Android Tint

    Android Tint 如果要实现下图效果,第一时间想到的是让 UI 切图,第二时间想到的是自己会被 UI 打死,第三时间想到的是自己会被命名累死.  那么,这该如何快速高效的实现呢? 其实 An ...

  5. 浅析MySQL基于ROW格式的二进制日志

    上文分析的二进制日志实际上是基于STATEMENT格式的,下面我们来看看基于ROW格式的二进制日志,毕竟,两者对应的binlog事件类型也不一样,同时,很多童鞋反映基于ROW格式的二进制日志无法查到原 ...

  6. 一个可随意定位置的带色Toast——开源代码Crouton的简单使用

    今天在公司要求的代码中,要求显示的提示能够更加具有多样化,而不是简单的Toast字样,第一想法肯定是自定义View呀,结果在浏览中发现还有这样的一个开源代码——Crouton. 几经折腾,发现这个东西 ...

  7. 5.C#WinForm基础登陆失败三次退出系统

    目标: 登陆界面,登陆错误三次退出程序.假设用户名密码是admin.888888,不区分大小写,(易错点:局部变量与类变量) 局部变量每次运行完毕变量的值都会被销毁,下次再运行,会重新初始化.     ...

  8. visual formatting model (可视化格式模型)【持续修正】

    概念: visual formatting model,可视化格式模型 The CSS visual formatting model is an algorithm that processes a ...

  9. Windows Phone Toolkit 的 DatePicker 控件本地化的问题

    用到 The Windows Phone Toolkit 里的 DatePicker 控件,但是多语言的时候出现了问题: 手机设置为中文,虽然月份跟星期有效,但是 Title 却还是默认的语言:CHO ...

  10. 设置nginx禁止IP直接访问,只能通过指定的域名访问

    nginx的版本是1.2.1. 设置配置文件disableip.conf: server {     listen 80;     server_name _;     return500; } 这是 ...