html
elasticsearch怎么同时检索单field多个值?
一、elasticsearch怎么同时检索单field多个值?
如果是中英文混合的情况,一般可以通过在mapping里面配置multi-field,然后分别设置分词器,如:中文场景下使用中文分词器,英文默认就能支持,如:ik\mmseg\ansj\jieba等都可以,pinyin字段使用pinyin分词器,如果你对英文搜索有特殊需求,建议也单配一个field,指定你要的英文分词.这样的好处就是每个字段的场景很清晰,结果的准确度比较高,在查询的时候,使用多个字段进行查询就行了,然后设置一下权重,比如:完整匹配>pinyin首字母>中文分词>pinyin二元分词缺点就是会额外占用一些索引空间.
二、轻松掌握 Elasticsearch 中的字段检索技巧
在使用Elasticsearch(以下简称为ES)进行数据检索时,如何有效地获取指定字段的信息是一个常见的问题。作为一名爱好者,我常常需要从大量数据中提取出让我感兴趣的信息,今天就来和大家聊聊如何轻松掌握这个技巧。
首先,了解Elasticsearch的索引结构是关键。ES底层使用的是一种名为倒排索引的技术,这意味着它能快速检索特定字段的值而不必扫描整个文档。在此之前,您需要定义好索引的映射(mapping),确保您关心的字段能被正确地索引。
检索指定字段的基础
在Elasticsearch中,进行简单的字段检索可以使用以下的REST API请求格式:
GET /index_name/_search
在这个请求中,您需要替换"index_name
"为您的索引名称。
使用查询语法获取指定字段
为了从结果中仅获取所需字段,您可以在请求中添加"_source"参数。例如,如果我只想检索字段title和author,可以像这样构造请求:
GET /index_name/_search
{
"_source": ["title", "author"],
"query": {
"match_all": {}
}
}
这样就可以在结果中仅看到我关心的title和author字段,而不需要无谓的信息,提升了检索效率。
实际案例
假设我们有一个关于书籍的索引,其中包含多个字段,诸如title、author、publish_date和summary。如果我只想查看特定作者的书名和出版日期,我可以构造如下的查询:
GET /books/_search
{
"_source": ["title", "publish_date"],
"query": {
"term": {
"author": "J.K. Rowling"
}
}
}
这个查询只会返回满足条件的书名和出版日期,大大减少了数据量。
灵活运用过滤器
在ES
中,除了使用_source外,您还可以使用filters来进一步精简检索结果。以下是使用过滤器的示例:
GET /books/_search
{
"_source": ["title"],
"query": {
"bool": {
"must": [
{
"match": {
"genre": "Fantasy"
}
}
],
"filter": {
"range": {
"publish_date": {
"gte": "2000-01-01",
"lte": "2020-12-31"
}
}
}
}
}
}
在这个请求中,我不仅获取了title字段,还通过过滤条件仅返回指定时间范围内的Fantasy类型书籍。
常见问题解答
很多刚接触Elasticsearch的朋友会问,如何知道需要具体哪些字段?你可以使用以下方法:
- 首先,从您的数据模型出发,明确哪个字段对您的应用场景最为重要。
- 其次,在执行简单的match_all查询时,查看返回的字段,并依此做出调整。
还常有人询问如何提升查询性能?这就需要我们考虑数据的量级以及索引的设置,合理利用文档分片(shards)和副本(replica)等功能,将帮助您优化性能。
总结
本文大致概述了在Elasticsearch中检索指定字段的基础技巧和方法。通过有效利用_source和过滤器,您可以高效地提取出所需数据,减少冗余信息,为您的应用开发提供支持。希望我的分享能帮助到同样在这条路上摸索的你!
三、elasticsearch collapse原理?
一、Elasticsearch概述
Elasticsearch 是一个基于Lucene的分布式搜索引擎。
搜索引擎三大过程:爬取内容、进行分词、建立反向索引。
二、Elasticsearch如何快速索引:倒排索引或反向索引
将key映射value,改为value映射key。
倒排索引:即把文件ID对应到关键词的映射转换为关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。
三、总结
1.Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
2.Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
3.Elasticsearch 一个典型应用就是 ELK 日志分析系统
四、elasticsearch怎么使用?
用2个Map作为传参,一个是must,一个是should。代码如下:
//创建查询
SearchRequestBuilder srb = client.prepareSearch(INDEX);
srb.setTypes(ASK_TYPE);
srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
//分页
srb.setFrom((pageNo - 1) * pageSize).setSize(pageSize);
//按时间倒序
SortBuilder sortBuilder = SortBuilders.fieldSort("date").order(SortOrder.DESC);
srb.addAggregation(aggregation);//聚合
srb.addSort(sortBuilder);//排序
/**********************主要看这里 start*********************************/
if(null != mustMap && mustMap.size() > 0){
//创建一个查询
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
//这里查询的条件用map传递
for(String key : mustMap.keySet()){
queryBuilder.must(QueryBuilders.termQuery(key,mustMap.get(key)));
}
//这里查询的条件用map传递
for(String key : shouldMap.keySet()){
queryBuilder.should(QueryBuilders.termQuery(key,mustMap.get(key)));
}
//查询
srb.setQuery(queryBuilder);
}
/**********************主要看这里 end*********************************/
//请求
SearchResponse response = srb.get();
//更多看这里:http://www.sojson.com/tag_elasticsearch.html
五、elasticsearch开源吗?
必须是的。获取源码地址:
https://github.com/elastic/elasticsearch
,切换到要读取的分支即可。六、elasticsearch 密码错误?
答,更新数据,确认密码是否正确,重试
七、elasticsearch管理规范?
shard是Elasticsearch数据存储的最小单位,index的存储容量为所有shard的存储容量之和。Elasticsearch集群的存储容量则为所有index存储容量之和。
一个shard就对应了一个lucene的library。对于一个shard,Elasticsearch增加了translog的功能,类似于HBase WAL,是数据写入过程中的中间数据,其余的数据都在lucene库中管理的。
所以Elasticsearch索引使用的存储内容主要取决于lucene中的数据存储。
八、elasticsearch存储结构?
基于lucene的存储结构
Lucene是一个功能强大的搜索库,但是基于Lucene进行开发比较复杂。ElasticSearch是基于lucene开发的搜索引擎,提供了更简单易用的API。
索引实际上是lucene中的概念,一个索引由多个索引段构成,大部分的场景是写一次,读多次。当满足某些条件时,多个索引段会合并成一个更大的索引段。索引段的减少有助于搜索效率的提高(可能是lucene内部原理决定的),但是频繁的段合并会影响性能。
Elasticsearch中的每次刷新都会新创建一个段,新创建的段里面的数据在下一次刷新之前是不会被搜索到的。ES的段合并是在后台进行的。
九、elasticsearch数据怎么删除?
其实限制一个node最高不超过3个shard也没有这必要,我们的做法是按照主机上SSD的数量来定shard的数量,因为这个时候每个shard实际上会落到一个硬盘上去。
至于数据存储的问题,首先要考虑业务,再确定shard和index的策略:
一般涉及到日志类的数据存储,应该按照日期来分index,这样查新的时候直接查最近写入的index就可以了,旧的index数据也可以定期删除或是转移到SATA盘里面去;
只用一个index也有好处,管理方便,但是需要提前考虑好数据的增长速度;
shard多了其实会更加浪费资源,但是一个shard太大了对恢复和迁移也是个问题,这种优化其实官方也没啥好的说法,总之一切看自己的实际情况,慢慢测试了。
十、elasticsearch哪国开发的?
美国开发的。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...