首页 文章

在java elasticsearch上设置字段数据= true

提问于
浏览
1

通过Eclipse运行java弹性搜索查询 . 在我测试时遇到此错误,我无法在API中找到告诉我如何将此字段数据设置为true的任何位置

IllegalArgumentException [默认情况下,在文本字段上禁用Fielddata . 在[created]上设置fielddata = true,以便通过反转索引来加载内存中的fielddata . 请注意,这可能会占用大量内存 . 或者,也可以使用关键字字段 . ]

有谁知道我怎么解决这个问题?

2 回答

  • 1

    您必须修改索引映射属性:

    try (XContentBuilder jsonBuilder = XContentFactory.jsonBuilder()) {
        final XContentBuilder builder = jsonBuilder
                .startObject()
                  .startObject("your_type")
                    .startObject("properties")
                      .startObject("your_field")
                        .field("type", "text")
                        .field("fielddata", true)/*setting fielddata*/
                      .endObject()
                    .endObject()
                  .endObject()
                .endObject();
    
        client.admin().indices().preparePutMapping("your_index")
                .setType("your_type")
                .setSource(builder)/*also there are overloads for setSource()*/
                .get();
    }
    

    OR

    String source = "{\"your_type\":{\"properties\":{\"your_field\":{\"type\":\"text\",\"fielddata\":true}}}}";
    client.admin().indices().preparePutMapping("your_index)
            .setType("your_type")
            .setSource(source, XContentType.JSON)
            .get();
    

    Result:

    {
      "your_index": {
        "aliases": {},
        "mappings": {
          "your_type": {
            "properties": {
              ...
              ...
              "your_field": {
                "type": "text",
                "fielddata": true,
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }
              ...
              ...
            }
          }
        }
      }
    }
    
  • 0

    在Elasticsearch 5.0中, String 字段分为两部分 - TextKeyword . 如果该属性应该被分析,您需要将 String 字段迁移到 Text ,如果没有,则将它们迁移到 Keyword .

    查看您的类型映射 - 如果您有这样的属性 -

    {
      "your_field": {
        "type" "string",
        "index": "not_analyzed"
      }
    }
    

    你想把它转换成这个 -

    {
      "your_field": {
        "type" "keyword",
        "index": true
      }
    }
    

    同样地,如果你的 property 应该被分析,你就像这样 -

    {
      "your_field": {
        "type" "string",
        "index": "analyzed"
      }
    }
    

    那么你想把它转换成这个 -

    {
      "your_field": {
        "type" "text",
        "index": true
      }
    }
    

    有关Elasticsearch official page的详细信息

相关问题