1

我遵循了 Couchbase - ElasticSearch 教程集成,并且正在使用啤酒样本桶对其进行测试。

我有一个问题。

我可以进行如下查询:

{
    "query": {
        "match": {
            "doc.name": "IPA"
        }
    }
}

但如果我这样搜索:

{
    "query": {
        "filtered": {
            "query": {
                "match_all": { }
            },
            "filter": {
                "term": { "doc.name": "IPA" }
            }
        }
    }
}

我没有得到任何结果。

使用其他字符串字段我没有问题,例如,“类型”:“啤酒”

{
    "query": {
        "match": {
            "doc.type": "beer"
        }
    }
}

{
    "query": {
        "filtered": {
            "query": {
                "match_all": { }
            },
            "filter": {
                "term": { "doc.name": "beer" }
            }
        }
    }
}

我不知道为什么。

提前致谢

4

1 回答 1

1

这是因为你的分析仪。对于字符串,默认分析器将输入小写。因此,IPA 被索引为 ipa。

术语过滤器不会分析您的输入,因此,您搜索 IPA 并且在您的索引中,您有 ipa --> IPA != ipa ,因此文档不匹配。

另一方面,匹配查询使用为该字段设置的分析器分析您的输入,因此,您的输入是小写的并且您搜索 ipa。

我希望这是有道理的。

于 2013-09-26T09:36:01.873 回答