elasticsearch - Elasticsearch 每字段提升、通配符和显式字段匹配冲突
问题描述
Elasticsearch 中的一些查询为带有提升的字段提供通配符匹配,例如,simple_query_string query
. 在我们的用例中,我们希望提升特定字段,同时将所有其他字段的分数设为 0。我们认为这可以通过以下示例查询模式来实现:
GET /kibana_sample_data_ecommerce/_search
{
"profile": "true",
"query": {
"simple_query_string": {
"query": "Eddie",
"fields": [
"*^0",
"customer_full_name^100"
]
}
}
}
但是,如果多个字段定义通过通配符匹配相同的字段名称,则它们的提升会成倍增加。上面的示例将为所有文档生成 0 分,即使它们在customer_full_name
字段中包含标记“Eddie”。
以下示例演示了提升成倍增加:
GET /kibana_sample_data_ecommerce/_search
{
"profile": "true",
"query": {
"simple_query_string": {
"query": "Eddie",
"fields": [
"*^0.1",
"customer_full_name^100"
]
}
}
}
它导致(customer_full_name:eddie)^10.0
查询的配置文件解释中的表达式。
这是否意味着不可能通过现场提升来实现我们想要的结果?期望的结果是:特定字段中的所有匹配项的分数都乘以 100,而其他字段中匹配的所有文档仍然返回,但分数为 0。
解决方案
推荐阅读
- mysql - MySQL VARCHAR 或 TEXT
- jquery - 检测空列以修改 Bootstrap 3 网格
- coldfusion - 如何有条件地将参数传递给 CFC 的实例?
- jquery - Jquery悬停在Draggable Div后如何恢复到原始CSS和Html?
- google-chrome - googCurrentDelayMs 是什么意思,哪些设置会影响它的值?
- python - 使用间隔索引在 DataFrame 中设置特定值
- mysql - 如何从另一个表中获取值
- amazon-web-services - AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列
- c - 使用多维数组 C 获取 5 个学生的平均值
- list - 从 AppleScript 的列表中选择多个项目