高级查询功能
在 Elasticsearch 中,高级查询功能可以帮助您实现更复杂和灵活的搜索需求。这些功能包括但不限于多字段查询、模糊查询、邻近查询和高亮显示等。
1. 多字段查询
-
multi_match查询:用于在多个字段中执行搜索。适合于需要在多个字段中查找匹配项的情况。GET /my-index/_search { "query": { "multi_match": { "query": "Elasticsearch", "fields": ["title", "description", "content"] } } }这个查询将在
title、description和content字段中搜索包含“Elasticsearch”的文档。 -
function_score查询:用于修改查询结果的评分,通过函数来调整每个文档的分数。GET /my-index/_search { "query": { "function_score": { "query": { "match": { "title": "Elasticsearch" } }, "functions": [ { "filter": { "term": { "category": "search" } }, "weight": 2 } ] } } }这个查询将对
title字段中匹配“Elasticsearch”的文档应用额外的权重,如果文档的category字段为“search”。
2. 模糊查询
-
fuzzy查询:用于处理拼写错误或类似的变体。通过允许一定程度的字符差异来匹配文档。GET /my-index/_search { "query": { "fuzzy": { "title": { "value": "Elasticserch", "fuzziness": "AUTO" } } } }这个查询将匹配
title字段中与“Elasticserch”相似的文档。
3. 邻近查询
-
match_phrase查询:用于查找在特定字段中按指定顺序出现的短语。GET /my-index/_search { "query": { "match_phrase": { "content": "real-time search" } } }这个查询将匹配
content字段中包含“real-time search”短语的文档。 -
match_phrase_prefix查询:用于查找以指定短语开头的文档,适用于自动补全等场景。GET /my-index/_search { "query": { "match_phrase_prefix": { "content": "real-time" } } }这个查询将匹配
content字段中以“real-time”开头的短语的文档。
4. 高亮显示
-
高亮显示:用于突出显示查询结果中匹配的部分,便于用户查看相关信息。
GET /my-index/_search { "query": { "match": { "content": "Elasticsearch" } }, "highlight": { "fields": { "content": {} } } }这个查询将返回
content字段中包含“Elasticsearch”的文档,并高亮显示匹配的部分。
5. 自定义评分
-
custom_score查询:通过自定义评分逻辑来调整文档的相关性得分。GET /my-index/_search { "query": { "custom_score": { "query": { "match": { "title": "Elasticsearch" } }, "script_score": { "script": { "source": "Math.log(2 + doc['popularity'].value)" } } } } }这个查询将使用脚本来调整
title字段中匹配“Elasticsearch”的文档的得分,得分基于popularity字段的对数值。
6. 矢量搜索(向量空间模型)
-
dense_vector查询:用于基于向量进行相似度搜索,适用于机器学习和深度学习应用。GET /my-index/_search { "query": { "knn": { "field": "embedding_vector", "query_vector": [0.5, 0.1, 0.4], "k": 10 } } }这个查询将基于
embedding_vector字段中存储的向量进行 K 最近邻搜索,找到与查询向量最相似的 10 个文档。
通过掌握这些高级查询功能,您可以更精准地检索和处理 Elasticsearch 中的数据,以满足各种复杂的搜索需求。