zero_terms_query 在 elasticsearch dsl 查询中的使用

Use of zero_terms_query in elasticsearch dsl query

谁能详细解释一下zero_terms_query elasticsearch,我看了elasticsearch的文档,但是没看懂

让我们通过自己的示例来理解它,为此让我们使用英语分析器创建一个索引,该索引将删除所有英语停用词,例如 to be or not to be example given by Elasticsearch.

索引映射

{
    "mappings" : {
        "properties" : {
            "title" : {
                "type" : "text",
                "analyzer" : "english"
            }
        }
    }
}

索引几个示例文档

{
    "title": "sudeesh"
}

{
    "title": "to be or not to be"
}

搜索查询从查询​​中删除所有停用词,因为我们正在使用 match 查询,该查询将相同的 english 分析器应用于搜索查询。


{
    "query": {
        "match": {
            "title": {
                "query": "to be or not to be",
                "operator": "and",
                "zero_terms_query": "all"
            }
        }
    }
}

搜索结果

 "hits": [
            {
                "_index": "72442818",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "title": "to be or not to be"
                }
            },
            {
                "_index": "72442818",
                "_id": "2",
                "_score": 1.0,
                "_source": {
                    "title": "sudeesh"
                }
            }
        ]

请注意,上面的搜索查询 return 都是我们指定的 "zero_terms_query": "all" 的文档,因此它将被视为 match_all 和 return 的所有文档。

如果您删除 "zero_terms_query": "all",它将被视为 Elasticsearch 文档中提到的 none 默认值,并且您不会得到任何搜索结果 ,因为没有搜索词在 Elasticsearch 中搜索。

当您的查询中包含所有停用词,并且您想要 return 更多搜索结果而不是 0 个搜索结果时,这尤其有用。