elasticsearch - Elasticsearch 过滤器不过滤
问题描述
我有 Elasticsearch 查询,我试图过滤具有特定类型“源”的结果,但无论过滤器值如何,查询都会产生相同数量的结果。
{
"query": {
"script_score": {
"query": {
"bool": {
"filter": {
"term": {
"source": "network"
}
},
"must": {
"multi_match": {
"query": "",
"cutoff_frequency": 0.001,
"type": "best_fields",
"fields": [
"body"
]
}
}
}
},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['body_vector'])"
}
}
},
"highlight": {
"fields": {
"*": {}
}
}
}
我尝试将源类型更改为关键字,但这并没有改变任何东西。
索引映射如下。
{
"mappings": {
"_source": {
"enabled": "true"
},
"properties": {
"body": {
"type": "text"
},
"source": {
"type": "text"
},
"body_vector": {
"dims": 512,
"type": "dense_vector"
},
},
"dynamic": "true"
}
}
下面的示例文档。
{"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean malesuada quis neque et volutpat. Integer sodales nec odio a suscipit. Morbi bibendum ut velit sed sagittis. Nulla id nibh porta, finibus tellus sit amet, dignissim eros. Nulla malesuada est mollis odio dignissim, in imperdiet quam ultricies. Proin velit velit, congue ut mollis sit amet, blandit id lorem. Sed interdum viverra augue. Nulla porttitor, elit sit amet euismod ultrices, libero lorem elementum ligula, eu facilisis urna enim sed purus. Proin tempor aliquam turpis. Nulla eget magna lectus. Donec ultricies erat eu tellus hendrerit dignissim.", "filename": "Filename 1", "source": "network", "documenttype": "docx", "lastmodified": "158262531", "title": "" }
{"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean malesuada quis neque et volutpat. Integer sodales nec odio a suscipit. Morbi bibendum ut velit sed sagittis. Nulla id nibh porta, finibus tellus sit amet, dignissim eros. Nulla malesuada est mollis odio dignissim, in imperdiet quam ultricies. Proin velit velit, congue ut mollis sit amet, blandit id lorem. Sed interdum viverra augue. Nulla porttitor, elit sit amet euismod ultrices, libero lorem elementum ligula, eu facilisis urna enim sed purus. Proin tempor aliquam turpis. Nulla eget magna lectus. Donec ultricies erat eu tellus hendrerit dignissim.", "filename": "Filename 2", "source": "network", "documenttype": "docx", "lastmodified": "158262531", "title": "" }
{"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean malesuada quis neque et volutpat. Integer sodales nec odio a suscipit. Morbi bibendum ut velit sed sagittis. Nulla id nibh porta, finibus tellus sit amet, dignissim eros. Nulla malesuada est mollis odio dignissim, in imperdiet quam ultricies. Proin velit velit, congue ut mollis sit amet, blandit id lorem. Sed interdum viverra augue. Nulla porttitor, elit sit amet euismod ultrices, libero lorem elementum ligula, eu facilisis urna enim sed purus. Proin tempor aliquam turpis. Nulla eget magna lectus. Donec ultricies erat eu tellus hendrerit dignissim.", "filename": "Filename 3", "source": "local", "documenttype": "docx", "lastmodified": "158262531", "title": "" }
{"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean malesuada quis neque et volutpat. Integer sodales nec odio a suscipit. Morbi bibendum ut velit sed sagittis. Nulla id nibh porta, finibus tellus sit amet, dignissim eros. Nulla malesuada est mollis odio dignissim, in imperdiet quam ultricies. Proin velit velit, congue ut mollis sit amet, blandit id lorem. Sed interdum viverra augue. Nulla porttitor, elit sit amet euismod ultrices, libero lorem elementum ligula, eu facilisis urna enim sed purus. Proin tempor aliquam turpis. Nulla eget magna lectus. Donec ultricies erat eu tellus hendrerit dignissim.", "filename": "Filename 4", "source": "local", "documenttype": "docx", "lastmodified": "158262531", "title": "" }
查询应该只返回 source = network 的前 2 个文档。
有什么想法吗?
解决方案
使用您的示例映射和文档以及以下搜索查询,它会返回包含source
as 的onlt 文档network
。
搜索查询
{
"query": {
"bool": {
"filter": [
{ "term": { "source": "network" }} -> filter all docs which contains network in source field.
]
}
}
}
结果
"hits": [
{
"_index": "so_60746695_dsl",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean malesuada quis neque et volutpat. Integer sodales nec odio a suscipit. Morbi bibendum ut velit sed sagittis. Nulla id nibh porta, finibus tellus sit amet, dignissim eros. Nulla malesuada est mollis odio dignissim, in imperdiet quam ultricies. Proin velit velit, congue ut mollis sit amet, blandit id lorem. Sed interdum viverra augue. Nulla porttitor, elit sit amet euismod ultrices, libero lorem elementum ligula, eu facilisis urna enim sed purus. Proin tempor aliquam turpis. Nulla eget magna lectus. Donec ultricies erat eu tellus hendrerit dignissim.",
"filename": "Filename 1",
"source": "network",
"documenttype": "docx",
"lastmodified": "158262531",
"title": ""
}
},
{
"_index": "so_60746695_dsl",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean malesuada quis neque et volutpat. Integer sodales nec odio a suscipit. Morbi bibendum ut velit sed sagittis. Nulla id nibh porta, finibus tellus sit amet, dignissim eros. Nulla malesuada est mollis odio dignissim, in imperdiet quam ultricies. Proin velit velit, congue ut mollis sit amet, blandit id lorem. Sed interdum viverra augue. Nulla porttitor, elit sit amet euismod ultrices, libero lorem elementum ligula, eu facilisis urna enim sed purus. Proin tempor aliquam turpis. Nulla eget magna lectus. Donec ultricies erat eu tellus hendrerit dignissim.",
"filename": "Filename 2",
"source": "network",
"documenttype": "docx",
"lastmodified": "158262531",
"title": ""
}
}
]
推荐阅读
- amcharts - Amcharts:列系列图表中的多类别轴网格对齐问题
- amazon-web-services - 通过 CloudFormation 向现有 VPC Endpoint 添加安全组
- python - 从列表中找到三个加起来等于特定数字的数字
- python-3.x - 有没有办法在 scipy.optimize 中访问 curve_fit 的内部状态?
- sql - 如何从最后一个父级的行中获取数据
- c - 如何在 switch 语句中评估案例 (C)
- backend - 实时 API 托管建议和架构设计建议
- node.js - npm 错误!errno fetch_error 角度
- tensorflow - AutoML Vision Edge 中使用什么算法?
- hibernate - 查询参数与 quarkus 上的结果不一致