前言
在了解Elasticsearch之前,我们应该先了解下:
- 什么是搜索引擎
- 目前有哪些主流的搜索引擎
- 搜索引擎搜索的质量应该如何评价
简介
什么是ES
es全称为Elasticsearch
,是一个高度可扩展且开源的全文检索和分析引擎。它可以让您快速且近实时地存储,检索以及分析海量数据。他是用java编写的基于Lucene
的一款软件。用户可以很容易的使用RESTful接口进行全文搜索和结构化搜索,当我们发现原来的数据库或系统无法满足我们的搜索需求的时候,我们可以引进es作为我们的搜索引擎来满足需求。ES能干什么
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤
。这种理解数据的方式与以往完全不同,这也是Elasticsearch能够执行复杂的全文搜索的原因之一。
可以完成的工作主要有: - 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 也可以作为一款分布式的数据库,支持保存大量结构化或者非结构化的数据
ES相关性评分
前面我们已经了解过如何评价一个搜索质量。而在es里,我们用相关性评分来评价 每一个结果和查询的相关程度,并根据相关程度对结果进行排名。当我们简单的用match来全文搜索的时候,结果中的score就是代表相关性评分。
一般情况下,初始的评分系统已经很全面和完整,具体公式详见:
https://www.elastic.co/guide/cn/elasticsearch/guide/cn/scoring-theory.html
当然,我们也可以自定义评分来满足各种各样的不同情境查询条件。ES的优缺点和同类竞品
目前市面上较为常用的搜索引擎有es、Solr
,这两款都是基于Lucene的搜索引擎。
在搜索引擎选择: Elasticsearch与Solr这篇文章里也对两者进行简单的比较和阐述。两者之间最大的区别是相对于es,solr在建立索引时,搜索效率会大大下降,且随着数据量的增加,Solr的效率会变得很低,而Elasticsearch却没有明显的变化。
除了上述两种方案,我们也可以直接选择使用Lucene
。
Lucene 是一个 JAVA 搜索类库,es和Solr都是基于Lucene实现的,通过结合实际的需求可以定制化和更大的优化空间,更多满足各式各样的需求,但同时需要投入大量的人力物力。