Python 入门教程:轻松玩转 Elasticsearch 搜索与过滤
2022-12-27 19:56:53
玩转 Elasticsearch 搜索与过滤:Python 入门指南
在当今信息爆炸的时代,快速而高效地查找相关信息变得至关重要。Elasticsearch,一个基于 Lucene 的开源搜索引擎,应运而生,以其分布式、可扩展、高可靠性和实时性等特性脱颖而出。掌握 Elasticsearch 中的搜索和过滤技术,无疑能极大提高信息检索效率。
分页:分块浏览,轻松掌控
面对海量搜索结果,分页功能显得尤为必要。Elasticsearch 提供多种分页方式,满足不同需求。
一种常见方式是使用 from
和 size
参数。from
指定分页起始位置,size
指定每页显示条数。例如:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"from": 10,
"size": 20
}
)
另一种方式是使用游标,标识当前分页位置。下一次分页只需指定上一次游标即可。
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"scroll": "1m",
"size": 20
}
)
scroll_id = res['_scroll_id']
while True:
res = es.scroll(
scroll_id=scroll_id,
scroll="1m"
)
if len(res['hits']['hits']) == 0:
break
过滤:精准出击,直达目标
为了更精准地定位所需信息,Elasticsearch 提供了多种过滤方式。
布尔查询通过 AND、OR、NOT 等逻辑运算符组合多个查询条件。例如,搜索标题包含 "python" 且内容包含 "elasticsearch" 的文档:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"query": {
"bool": {
"must": [
{"match": {"title": "python"}},
{"match": {"content": "elasticsearch"}}
]
}
}
}
)
范围查询则根据字段值过滤结果。例如,搜索发布时间在指定时间段内的文档:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"query": {
"range": {
"publish_date": {
"gte": "2023-01-01",
"lte": "2023-12-31"
}
}
}
}
)
除此之外,Elasticsearch 还提供了正则表达式查询、近似查询、模糊查询、词组查询和通配符查询等多种过滤方式,满足不同需求。
排序:由浅入深,层层递进
为了呈现最相关或重要的结果,排序功能不可或缺。
相关性排序根据文档与查询条件的关联度排序。例如:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"sort": [
{"_score": {"order": "desc"}}
]
}
)
字段排序则根据指定字段值排序。例如,按发布时间降序排序:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"sort": [
{"publish_date": {"order": "desc"}}
]
}
)
Elasticsearch 还提供了脚本排序和地理位置排序等多种排序方式。
高亮显示:锦上添花,一触即发
高亮显示可以突出显示搜索结果中与查询条件匹配的内容,增强可读性。
HTML 高亮显示在匹配内容周围添加 HTML 标签,在浏览器中显示高亮效果:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"highlight": {
"fields": {
"title": {},
"content": {}
}
}
}
)
片段高亮显示则在匹配内容周围添加片段,在终端中显示高亮效果:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(
index="my_index",
body={
"highlight": {
"fields": {
"title": {},
"content": {}
},
"fragment_size": 100
}
}
)
Elasticsearch 还提供了统一高亮显示和自定义高亮显示等多种方式。
结论
掌握 Elasticsearch 中的搜索和过滤技术,犹如手持利器,让你在信息海洋中畅游自如,快速高效地找到所需内容。掌握了分页、过滤、排序和高亮显示等核心功能,你就能游刃有余地驾驭 Elasticsearch,开启高效信息检索之旅。
常见问题解答
-
Elasticsearch 的优势是什么?
- 分布式、可扩展、高可靠性和实时性。
-
如何进行分页?
- 使用
from
和size
参数或游标。
- 使用
-
如何过滤搜索结果?
- 使用布尔查询、范围查询等多种过滤方式。
-
如何对搜索结果排序?
- 使用相关性排序、字段排序等多种排序方式。
-
如何高亮显示搜索结果?
- 使用 HTML 高亮显示、片段高亮显示等多种高亮显示方式。