要从bool查询中获取每个查询的单独评分,可以使用
Elasticsearch
的function_score查询。
下面是一个示例的代码:
from elasticsearch import Elasticsearch
es = Elasticsearch()
# 创建索引和映射
index_name = "my_index"
mapping = {
"properties": {
"title": {"type": "text"},
"description": {"type": "text"}
es.indices.create(index=index_name, body={"mappings": mapping})
# 添加示例文档
es.index(index=index_name, id=1, body={"title": "foo", "description": "bar"})
es.index(index=index_name, id=2, body={"title": "baz", "description": "qux"})
# 执行bool查询
query = {
"query": {
"bool": {
"should": [
{"match": {"title": "foo"}},
{"match": {"description": "bar"}}
# 使用function_score查询获取每个查询的评分
query["query"]["bool"]["should"] = [
"function_score": {
"query": {"match": {"title": "foo"}},
"script_score": {"script": "_score"}
"function_score": {
"query": {"match": {"description": "bar"}},
"script_score": {"script": "_score"}
# 执行查询
result = es.search(index=index_name, body=query)
# 打印每个查询的评分
for hit in result["hits"]["hits"]:
print("Query: ", hit["_source"])
print("Score: ", hit["_score"])
print()
此代码首先创建一个名为my_index
的索引,并定义了title
和description
字段的映射。然后,添加了两个示例文档。
接下来,使用bool查询来搜索包含title
字段为"foo"或description
字段为"bar"的文档。
然后,使用function_score查询替换bool查询的should子句。在每个function_score查询中,我们将query
字段设置为相应的match查询,并将script_score
设置为_score
,以获取每个查询的评分。
最后,执行查询并打印每个查询的评分。
请注意,由于使用了script_score,需要确保Elasticsearch的脚本评分插件已启用。