应用搜索
搜索可以造就用户体验,也可以破坏用户体验。快速搜索出相关结果才是良好体验。Elasticsearch 是现如今最常用的一款开源搜索引擎。这里将介绍它受欢迎的原因。
您在过去 24 小时之内已经接触到了 Elastic
每个人都要寻找一些东西。从查找信用卡收据到日期、膳食、几瓶洗发水或乘车回家,Elasticsearch 为数千个应用程序和网站(例如 Wikipedia、Esri、Intuit、Yelp、Tinder 和 Dell.com)提供搜索体验。
无论是文档搜索、电子商务搜索、地理搜索还是图片搜索,都有着无穷的可能性。学习如何开始。
专为速度和规模而创建的引擎
在其他系统中需要几个小时或几分钟才能运行的查询,在 Elasticsearch 中只需要几毫秒的时间。它很智能,赋予 PB 级数据高可用性和易用性,能够快速处理您一股脑扔给它的文本、数字、日期、IP 以及地理数据。
另外,从小处着手,也很容易实现增长;它能够水平扩展,同时自动管理索引和查询在集群中的分布情况。
您可以让它成为您自己的工具
Elasticsearch 使您可以完全控制您的应用程序的搜索体验。 它是您的开源搜索引擎,而不是黑匣子。
利用双手深入挖掘,以调整相关性,配置文本分析,优化查询,并根据对以下方面的实时洞见来推动结果:用户所查找的内容、搜索时间、接下来要查找的内容等。
Elasticsearch 对开发人员友好
Elasticsearch 随附简单、一致的查询语言,并使用标准的 RESTful API 和 JSON。此外,它还中意于语言客户端 — Python、Ruby、.NET、Java、Groovy 等不胜枚举 — 不仅让人感觉自然流畅,您还可以按照自己的喜好来使用 Elasticsearch,而无论编程背景是什么。
(此外,我们建立了一个全球社区,拥有超过 100,000 名成员。这确实是我们最喜爱的功能之一。)
curl -H "Content-Type: application/json" -XGET
'http://localhost:9200/social-*/_search' -d '{
"query": {
"match": {
"message": "myProduct"
}
},
"aggregations": {
"top_10_states": {
"terms": {
"field": "state",
"size": 10
}
}
}
}'
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost", 9200, "http")).build());
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.aggregation(AggregationBuilders.terms("top_10_states").field("state").size(10));
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("social-*");
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest);
var client = new ElasticClient();
var searchResponse = client.Search<Tweet>(s => s
.Index("social-*")
.Query(q => q
.Match(m => m
.Field(f => f.Message)
.Query("myProduct")
)
)
.Aggregations(a => a
.Terms("top_10_states", t => t
.Field(f => f.State)
.Size(10)
)
)
);
from elasticsearch import Elasticsearch
esclient = Elasticsearch(['localhost:9200'])
response = esclient.search(
index='social-*',
body={
"query": {
"match": {
"message": "myProduct"
}
},
"aggs": {
"top_10_states": {
"terms": {
"field": "state",
"size": 10
}
}
}
}
)
var elasticsearch = require('elasticsearch');
var esclient = new elasticsearch.Client({
host: 'localhost:9200'
});
esclient.search({
index: 'social-*',
body: {
query: {
match: { message: 'myProduct' }
},
aggs: {
top_10_states: {
terms: {
field: 'state',
size: 10
}
}
}
}
}
).then(function (response) {
var hits = response.hits.hits;
}
);
$esclient = Elasticsearch\ClientBuilder::create()
->setHosts(["localhost:9200"])
->build();
$params = [
'index' => 'social-*',
'body' => [
'query' => [
'match' => [ 'message' => 'myProduct' ]
],
'aggs' => [
'top_10_states' => [
'terms' => [
'field' => 'state',
'size' => 10,
]
]
]
]
];
$response = $esclient->search($params);
use Search::Elasticsearch;
my $esclient = Search::Elasticsearch->new( nodes => 'localhost:9200' );
my $response = $esclient->search(
index => 'social-*',
body => {
query => {
match => { message => 'myProduct' }
},
aggs => {
top_10_states => {
terms => {
field => 'state',
size => 10
}
}
}
}
);
require 'elasticsearch'
esclient = Elasticsearch::Client.new
response = esclient.search index: 'social-*', body: {
query: {
match: {
message: 'myProduct'
}
},
aggregations: {
top_10_states: {
terms: {
field: 'state',
size: 10
}
}
}
}
很多公司有同样的苦恼:Walgreens 故事
“不浪费客户的时间”是美国零售商 Walgreens 所坚持的典范。为了坚守这一承诺,他们为其手机应用程序采用 Elasticsearch,取代了原来专有、严格的搜索解决方案。
他们只是使用 Elastic 进行搜索的众多公司之一。探索更多客户示例。