州コードをクエリ文字列として使用して州をクエリしていますが、おそらく予約語であるため、「in」と「or」(インディアナとオレゴン) は失敗しています。
実行すると、データがインデックスに正しく存在することを確認できます。
curl -XGET 'localhost:9200/state/_search?size=200&pretty=true' -d '{"query" : {"match_all" : {}}}' > out.txt
動作状態と非動作状態の両方のデータが表示されます。さらに、CouchDB で非稼働状態の状態コードを XYZ などに変更すると、上記のコマンドを実行して XYZ を検索することで、変更が ES に反映されることを確認できます。だから私は正しいデータを見ていることを知っており、それはうまく索引付けされています。
問題はクエリです。現在、クエリ オブジェクト全体は次のようになっています。
var q = {
size: 0,
query: {
filtered: {
query: { term: { postcode: 'tn' } },
filter: { term: { version: 2 } }
}
},
facets: {
version: { terms: { field: "version" } },
count : { statistical : { field : "latestValues.enroll" } }
}
};
そのクエリを実行すると、結果が得られません。「または」を「tn」、「tx」、「sc」などに変更すると、正常に動作します。
予約語をエスケープする方法を探したところ、このリンクが見つかりましたが、次のクエリを実行するとうまくいかないようです。
var q = {
size: 0,
query: {
filtered: {
query: { match_all: { } },
filter: { term: { version: 2, postcode: 'or' } }
}
},
facets: {
version: { terms: { field: "version" } },
count : { statistical : { field : "latestValues.enroll" } }
}
};
(そのクエリは、「または」を予約語ではない状態に変更した場合にも機能するため、クエリ自体には問題がないことがわかっています)。
何か案は?