首页 > Python资料 博客日记
谷粒商城实战笔记-117-全文检索-ElasticSearch-进阶-term查询
2024-08-11 15:00:09Python资料围观49次
在Elasticsearch中,
term
查询是一种基本的查询类型,用于执行不分析(不经过分析器处理)的精确匹配。以下是
term
查询以及与
match_phrase
和
keyword
查询的比较和示例:
term 查询
- 用途:用于执行不分词的精确匹配,适合用于那些不需要分词的字段,如标签(tags)、状态码(status codes)等。
- 特点:
term
查询不会对查询字符串进行分析,因此它匹配的是确切的值。它通常用于那些不需要全文搜索的字段。
示例:
GET bank/_search
{
"query": {
"term": {
"age": 28
}
}
}
这个查询将找到所有age
字段值为"28"的文档。
term最佳实践
term查询适用非text类型,但语法上,对text类型使用term查询也不会报错,但并不推荐这样做。理由如下:
-
不进行分析:
term
查询不会对查询字符串进行分析。这意味着,即使字段是text
类型,term
查询也会尝试进行精确匹配。 -
可能的不匹配:由于
text
类型的字段在索引时会被分析器分解成单个词元(tokens),使用term
查询可能会导致查询不匹配任何文档,因为查询字符串没有被分解成与索引时相同的词元。 -
大小写敏感:
term
查询是大小写敏感的,而text
字段的分析通常包括将文本转换为小写。这意味着即使文档中包含查询字符串,但由于大小写不匹配,term
查询可能找不到匹配项。 -
不使用全文搜索功能:使用
term
查询text
字段将绕过全文搜索功能,如词干提取、同义词处理等,这些功能通常用于提高搜索的相关性。 -
可能的性能影响:由于
term
查询通常用于keyword
类型的字段,这些字段在索引时不会被分析,因此使用term
查询text
字段可能不会利用Elasticsearch的缓存机制,这可能会对查询性能产生负面影响。
示例:如果你有一个text
类型的字段content
,并且你尝试使用term
查询来搜索一个完整的短语:
{
"query": {
"term": {
"content": {
"value": "The quick brown fox"
}
}
}
}
这个查询可能不会返回任何结果,因为content
字段在索引时已经被分词器分解成了单独的词元,而term
查询期望找到精确的字符串"The quick brown fox",包括空格和大小写。
如果确实需要在text
字段上执行精确匹配,应该考虑使用keyword
类型的字段,或者在查询时使用match
查询而不是term
查询。使用match
查询可以利用Elasticsearch的全文搜索功能,包括分词器的处理。
match_phrase 查询
- 用途:用于执行全文搜索,匹配短语或多个词的精确顺序。
- 特点:
match_phrase
查询会对查询字符串进行分词,并尝试匹配整个短语或词的顺序。它适用于需要考虑词序的全文搜索场景。
示例:
{
"query": {
"match_phrase": {
"description": "quick brown fox"
}
}
}
这个查询将找到所有description
字段包含"quick brown fox"这个短语的文档,并且词的顺序与查询中相同。
keyword 查询
- 用途:用于对
keyword
类型的字段执行精确匹配。 - 特点:
keyword
查询通常用于那些在索引时不经过分词器处理的字段。它允许用户搜索确切的字符串值,而不考虑分词器的影响。
示例:
{
"query": {
"match": {
"username.keyword": "john_doe"
}
}
}
这个查询将找到所有username
字段的keyword
子字段值为"john_doe"的文档。
区别
- 分词器:
term
和keyword
查询不会对查询字符串进行分析,而match_phrase
会。 - 用途:
term
适合于不需要分析的字段,keyword
查询通常用于keyword
类型的字段,而match_phrase
适合于需要考虑词序的全文搜索。 - 匹配方式:
term
和keyword
查询匹配的是确切的值,而match_phrase
匹配的是短语和词的顺序。
在实际使用中,选择哪种查询类型取决于字段的索引方式和搜索需求。如果字段是text
类型,可能需要使用match
或match_phrase
查询;如果字段是keyword
类型,或者需要执行不分词的精确匹配,可以使用term
或keyword
查询。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj