Elasticsearch 实战:Elasticsearch 文档条件查询
Elasticsearch 提供了丰富的查询语句,使得用户可以根据特定条件对文档进行精准筛选。以下是一些常见的文档条件查询方法:
**1. **精确匹配查询(Term Query)
当需要查找某个字段值与指定值完全相等的文档时,可以使用精确匹配查询(Term Query)。例如,查找所有作者为 “Clintongormley” 的书籍:
GET /my_index/_search
{
"query": {
"term": {
"author": "Clintongormley"
}
}
}
**2. **范围查询(Range Query)
范围查询允许您根据字段值位于某个区间内(包括边界)来筛选文档。例如,查找价格在 50 到 100 之间的书籍:
GET /my_index/_search
{
"query": {
"range": {
"price": {
"gte": 50,
"lte": 100
}
}
}
}
**3. **全文搜索查询(Match Query)
全文搜索查询用于对文本字段进行全文搜索,支持分词、同义词处理、停用词移除等。例如,查找标题中包含 “Elasticsearch” 的书籍:
GET /my_index/_search
{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
**4. **短语查询(Match Phrase Query)
短语查询用于查找包含特定短语的文档,与全文搜索相比,它要求匹配的单词必须按照指定顺序出现。例如,查找标题中包含短语 “Elasticsearch in Action” 的书籍:
GET /my_index/_search
{
"query": {
"match_phrase": {
"title": "Elasticsearch in Action"
}
}
}
**5. **多字段查询(Multi Match Query)
多字段查询允许您在一个查询中对多个字段执行相同的全文搜索。例如,查找标题或作者中包含 “Elasticsearch” 的书籍:
GET /my_index/_search
{
"query": {
"multi_match": {
"query": "Elasticsearch",
"fields": ["title", "author"]
}
}
}
**6. **布尔查询(Bool Query)
布尔查询是 Elasticsearch 最强大的查询类型之一,它可以将多个查询条件组合成复杂的逻辑表达式。布尔查询支持以下子句:
- must:所有子句都必须匹配。
- should:至少有一个子句匹配,用于提高相关度得分。
- must_not:所有子句都不能匹配。
例如,查找标题包含 “Elasticsearch” 且作者不是 “Zachary Tong” 的书籍:
GET /my_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } }
],
"must_not": [
{ "term": { "author": "Zachary Tong" } }
]
}
}
}
**7. **通配符查询(Wildcard Query)、正则表达式查询(Regexp Query)、模糊查询(Fuzzy Query)
这些查询类型适用于更为复杂的字符串匹配场景:
-
通配符查询:使用星号
*
或问号?
作为通配符匹配文本。例如,查找标题以 “Elastic” 开头的书籍:GET /my_index/_search { "query": { "wildcard": { "title": "Elastic*" } } }
-
正则表达式查询:使用正则表达式匹配文本。例如,查找标题包含连续两个 “a” 字母的书籍:
GET /my_index/_search { "query": { "regexp": { "title": ".*aa.*" } } }
-
模糊查询:允许对文本进行一定程度的拼写错误容忍。例如,查找标题接近 “Elasticsearch” 但允许最多一个字符错误的书籍:
GET /my_index/_search { "query": { "fuzzy": { "title": { "value": "Elasticsearch", "fuzziness": "AUTO" } } } }
通过灵活运用这些条件查询方法,您可以根据实际需求构建出复杂且精准的查询语句,从 Elasticsearch 中检索出所需文档。在实际应用中,应结合业务场景和数据特点选择最适合的查询类型和参数,以实现高效准确的数据检索。