Elasticsearch 过滤器不过滤

Elasticsearch filter not filtering

我有 Elasticsearch 查询,我在其中尝试过滤具有特定类型 "source" 的结果,但无论过滤值如何,查询都会产生相同数量的结果。

{
    "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": "" }

查询应该只 return 源 = 网络的前 2 个文档。

有什么想法吗?

使用您的示例映射和文档以及下面的搜索查询,它 returns 包含 source 作为 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": ""
                }
            }
        ]