Elasticsearch的查询语法是DSL(Domain-Specific Language)的一部分,主要用于构建各种类型的查询。以下是一些常见的查询语法示例:
匹配查询(match)
查询特定字段包含指定文本的文档
{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
多字段匹配查询(multi_match)
在多个字段中进行匹配查询
{
"query": {
"multi_match": {
"query": "open source",
"fields": ["title", "content"]
}
}
}
短语匹配查询(match_phrase)
查询包含指定短语的文档。
{
"query": {
"match_phrase": {
"title": "Elasticsearch tutorial"
}
}
}
那么match_phrase
和match
有什么区别呢?
match
查询:
match
查询用于执行全文搜索,它会将查询字符串分词,然后在索引中查找包含任何一个分词的文档。默认情况下,match
查询使用分词器进行分词操作。适用于自然语言搜索,如对文本内容进行关键字匹配。
match_phrase
查询:
match_phrase
查询用于执行精确的短语匹配,它会将查询字符串视为一个整体,并在索引中查找包含完全匹配查询短语的文档。不会进行分词操作。适用于需要确保查询短语在文档中以特定顺序出现的场景。
布尔查询 (bool)
使用布尔逻辑组合多个查询条件,包括 must
(与操作)、should
(或操作)和 must_not
(非操作)。
{
"query": {
"bool": {
"must": [
{ "match": { "field1": "value1" } },
{ "range": { "field2": { "gte": 10, "lte": 20 } } }
],
"should": [
{ "term": { "field3": "value2" } }
],
"must_not": [
{ "exists": { "field": "field4" } }
]
}
}
}
范围查询 (range)
用于指定字段值在给定范围内的文档。
{
"query": {
"range": {
"field_name": {
"gte": 10,
"lte": 20
}
}
}
}
通配符查询 (wildcard)
使用通配符进行模糊匹配。
{
"query": {
"wildcard": {
"field_name": "search*"
}
}
}
正则表达式查询 (regexp):
使用正则表达式进行匹配。
{
"query": {
"regexp": {
"field_name": ".*pattern.*"
}
}
}
模糊查询 (fuzzy)
允许在指定字段中进行模糊匹配。
{
"query": {
"fuzzy": {
"title": {
"value": "elasticserach",
"fuzziness": 2
}
}
}
}
match
查询:
match
查询用于执行全文搜索,它会将查询字符串分词,然后在索引中查找包含任何一个分词的文档。默认情况下,match
查询使用分词器进行分词操作。适用于自然语言搜索,如对文本内容进行关键字匹配。
fuzzy
查询:
fuzzy
查询用于执行模糊匹配,允许在匹配查询时包含一定程度的拼写错误或变体。它不进行分词,而是将整个查询字符串视为一个整体,尝试找到与之相似的文档。适用于处理可能存在拼写错误的场景,或者对于需要容忍一些文本变体的需求。
评论