3

州コードをクエリ文字列として使用して州をクエリしていますが、おそらく予約語であるため、「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"  } }
    }
};

(そのクエリは、「または」を予約語ではない状態に変更した場合にも機能するため、クエリ自体には問題がないことがわかっています)。

何か案は?

4

1 に答える 1

4

これは「予約された」単語ではなく、ストップ ワードに関するものです。ストップ ワードを削除するアナライザーを使用しています (より新しいバージョンの Elasticsearch までのデフォルトのアナライザー)。

フィールドのアナライザーを変更する必要があります。こちらを参照してください: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html

これは変更されますが、再インデックスが必要です

于 2013-10-24T18:14:33.900 に答える