1

私は Couchbase - ElasticSearch チュートリアルの統合に従い、beer-sample バケットでテストしています。

問題があります。

次のようなクエリを実行できます。

{
    "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 に答える