2

我正在使用包含另一个嵌套字段的嵌套字段(因此字段的 2 步树)为 Elasticsearch 文档编制索引。我想根据内部嵌套字段中的数据匹配文档,这不起作用。

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”。您正在搜索索引中不存在的标记“总统”和“奥巴马”。

您可以通过以下方式解决此问题

  1. 将字段映射更改为not_analyzed,
  2. 用文本查询替换术语过滤器或
  3. 在您的术语过滤器中使用正确的标记(在这种情况下为“总统”和“奥巴马”)。
于 2012-04-18T13:16:01.143 回答