2

別のネストされたフィールドを含むネストされたフィールドを持つElasticsearchドキュメントのインデックスを作成しています(フィールドの2ステップツリー)。内部のネストされたフィールドのデータに基づいてドキュメントを照合したいのですが、機能していません。

NestedFilterBuilder は以下のようになります。

        "nested" : {
          "filter" : {
            "or" : {
              "filters" : [ {
                "term" : {
                  "event_attribute_value" : "Obama"
                }
              }, {
                "term" : {
                  "event_attribute_value" : "President"
                }
              } ]
            }
          },
          "path" : "eventnested.attributes"
        }

これは、クエリを生成するために使用しているJavaです

orFilter.add(termFilter("event_attribute_value","president"));
NestedFilterBuilder nestedFilterBuilder = new NestedFilterBuilder("eventnested.attributes", orFilter);
finalFilter.add(nestedFilterBuilder);

インデックスが作成されるマッピング

"eventnested":{
            "type" : "nested", "store" : "yes", "index" : "analyzed", "omit_norms" : "true",
            "include_in_parent":true,
            "properties":{              
                "event_type":{"type" : "string", "store" : "yes", "index" : "analyzed","omit_norms" : "true"},
                "attributes":{
                "type" : "nested", "store" : "yes", "index" : "analyzed", "omit_norms" : "true",
                "include_in_parent":true,
                    "properties":{
                        "event_attribute_name":{"type" : "string", "store" : "yes", "index" : "analyzed","omit_norms" : "true"},
                        "event_attribute_value":{"type" : "string", "store" : "yes", "index" : "analyzed","omit_norms" : "true"}
                    }
                    },
                "event_attribute_instance":{"type" : "integer", "store" : "yes", "precision_step" : "0"}
                }                                           
                }

私が間違って使用しているものはありますか?

4

1 に答える 1

3

あなたのマッピングによると、event_attribute_value分析されます。これは、索引付け中に「President Obama」という語句が「president」と「obama」の 2 つのトークンに分析されることを意味します。索引に存在しないトークン「President」と「Obama」を検索しています。

この問題は次の方法で解決できます。

  1. フィールド マッピングを に変更しnot_analyzed
  2. 単語フィルターをテキスト クエリに置き換えるか、
  3. 用語フィルターで正しいトークンを使用します (この場合は「大統領」と「オバマ」)。
于 2012-04-18T13:16:01.143 に答える