MST

星途 面试题库

面试题:ElasticSearch搜索API之多字段复杂查询

假设在ElasticSearch中有一个索引,包含'title'(标题)、'content'(内容)和'tags'(标签)字段。现在要求编写一个搜索API,实现如下功能:搜索标题中包含'技术'且内容中包含'创新',同时标签中包含'前沿'的文档。请详细描述使用的查询语法及可能涉及的参数设置。
26.1万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

在Elasticsearch中,可以使用bool查询来组合多个查询条件。以下是实现该搜索功能的查询语法示例:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "title": "技术"
                    }
                },
                {
                    "match": {
                        "content": "创新"
                    }
                },
                {
                    "match": {
                        "tags": "前沿"
                    }
                }
            ]
        }
    }
}

涉及的参数设置

  1. match查询
    • match查询是Elasticsearch中最常用的文本查询方式。它会根据字段的映射类型进行适当的分析。例如,对于title字段,match查询会将"技术"这个词根据title字段配置的分析器进行分词,然后在倒排索引中查找匹配的文档。
  2. bool查询
    • bool查询用于组合多个查询子句。
    • must子句:所有must子句中的查询都必须匹配,文档才会被包含在结果中。这里我们将titlecontenttagsmatch查询放在must子句中,意味着文档必须同时满足这三个条件才会被返回。

在实际使用中,可能还会涉及到以下参数设置(未在上述示例中体现,但根据具体需求可能用到):

  • 分页参数
    • from:指定从结果集的第几个文档开始返回,默认为0。例如,from=10表示从第11个文档开始返回。
    • size:指定返回的文档数量,默认为10。例如,size=20表示返回20个文档。
  • 排序参数
    • 可以使用sort参数对结果进行排序。例如,按照某个数值字段score降序排序:
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "title": "技术"
                        }
                    },
                    {
                        "match": {
                            "content": "创新"
                        }
                    },
                    {
                        "match": {
                            "tags": "前沿"
                        }
                    }
                ]
            }
        },
        "sort": [
            {
                "score": {
                    "order": "desc"
                }
            }
        ]
    }