*面对基于全球用户消费和产生的大数据,为了对用户请求及时响应,我们对非关系型数据存储和处理技术越来越关注。称为No SQL (Not only SQL )。对不同类型的数据有单独的存储和处理引擎。也就是说,NoSQL是对解决一类具体问题具体数据类型的优化。架构师组合多NoSQL和关系数据库。一种类型适应所有数据的时代已经过去了!
*Apache Solr就是一种具体的NOSQL技术。Solr就是针对检索大规模文本并返回相关性排序的企业搜索引擎。基本特性
*Scalable:可部署于多服务器的集群
*Ready to deploy:提供完善的程序,可以立刻部署使用
*Optimized for search:快速搜索复杂query的能力
*Large volumes of documents:
*Text-centric:对自然语言的检索内容优化
*Results sorted by relevance:文档与query的相关性排序
1.1 Why do I need a search engine?
1.1.1 Managing text-centric data
现代应用架构的特点是存储和处理引擎与你的数据相匹配。正如算法问题要选择合适的数据结构,Solr基于如下四个特点优化:
1.Text-centric
2.Read-dominant
3.Document-oriented
4.Flexible schema
上述四条揭示了solr不是一种通用的数据存储和处理技术,而是关系数据库和NOSQL数据库基于搜索问题的补充! 1.1.2 Common search-engine use cases 优秀的搜索引擎的门槛bar?是高的 应该把用户体验放在一个高的优先级 *BASIC KEYWORD SEARCH 是用户的最基本需求,必须提供最好的用户体验!
■快速返回
■拼写检查
■自动关键词推荐,尤其对于移动应用
■query同义词识别
■与query同义的文档必须匹配
■语法处理:是匹配所有词还是任一个词
■停止词处理:a,an,the等
■如果对首页结果不满意,user可以看到更多的结果 *RANKED RETRIEVAL SQL返回要么匹配结果,Solr返回基于相关性排序的结果 *BEYOND KEYWORD SEARCH 用户对搜索需求不明确,Solr提供例如分类技术facet search帮助用户
*DON 'T USE A SEARCH ENGINE TO ...
Solr提供搜索分页技术,如过要求不分页但返回文档巨大,则会非常慢!(query结果很快,但生成结果很慢!)
对索引结构的深度分析(除非你有很大的内存)?
不提供文档相关性的query
不提共文档级别的安全性,如果需求,则需要外部的程序
1.2What is Solr?
Solr不是网页搜索引擎如google,baidu
Solr与SEO没有任何关系
1.2.1Information retrieval engine
基于apache lucene
Information retrieval (IR) is finding material (usually documents) of an
unstructured nature (usually text) that satisfies an information need from
within large collections (usually stored on computers).
solr使用lucene的索引和搜索库
lucene倒排索引保存文档id和索引出现频率
1.2.2Flexible schema management
Lucene只提供核心库,如果要使用lucene,还需要大量的java编程。
solr提供了方便的配置程序,只需要配置几个xml就可以运行搜索程序。
1.2.3Java web application
solr的分布式架构图
solr提供基于http,xml,json等协议的服务,同时也提供各种流行编程语言的API。(主要使用Java的API——SolrJ)
1.2.4Multiple indexes in one server
但服务器可运行多个core
1.2.5可扩展性:插件系统可以方便的定制需求
1.2.6Scalable
单机系统有局限
solr提供缓存管理
query吞吐量和索引文档数量
吞吐量:通过复制索引,可以让多服务器处理query(实践中,处理能力不是线性增长的,例如3台服务器的处理能力可能是2.5)
文档数量:将索引分成"shards"
Solr可以部署到云平台的虚拟硬件上,但搜索是对内存和IO敏感的,如果对搜索性能有较高的要,则需要高端的硬件。 1.2.7容错 确保集群中部分服务器出错,solr还能正常运行
1.3 Why Solr?
1.3.1 Solr for the software architect
稳定性,分布式,容错性都表现出色!
SolrCloud使用Zookeeper管理分布式系统
1.3.2Solr for the system administrator
solr内置了Jetty,
支持HTTP,JMX等等
提供一个web管理界面
1.3.3Solr for the CEO
many companies are still running on Solr you can have it up and running in minutes Solr has a large support community,You also have access to the source code
Solr doesn’t require much initial investment to get started.
1.4Features overview
1.4.1User-experience features:用户体验特性
*Pagination and sorting:分页和排序:更快的显示,相关性排序
*FACETING:层面搜索(分类):提炼搜索结果
*AUTOSUGGEST:拼写推荐
*SPELL - CHECKER:拼写检查
*highlight
*地图搜索
1.4.2 Data-modeling features
*RESULT GROUPING / FIELD COLLAPSING:基于文档的共同特征分组(不同于facet是基于field分组)
例如相似内容的email将会分到一组
*FLEXIBLE QUERY SUPPORT:
Conditional logic using AND , OR , and NOT
Wildcard matching
Range queries for dates and numbers
Phrase queries with slop to allow for some distance between terms?
Fuzzy string matching:模糊匹配
Regular expression matching
Function queries
*Join
With Solr joins, you can return child documents of parents that match your search criteria. One example in which Solr joins are useful is returning all retweets of a Twitter message into a single response.
*DOCUMENT CLUSTERING
怎么又来了个聚类%>_