当前位置: 首页 > 知识库问答 >
问题:

弹性搜索不是x内容例外

湛玄裳
2023-03-14

我一直在尝试使用以下代码通过java进行弹性搜索:

String url = "http://localhost:9200/testindex2/test/2";
    HttpClient client = new DefaultHttpClient();

    HttpPut put = new HttpPut(url);
    JSONObject json = new JSONObject();

    json.put("email", "abc@abof.com");
    json.put("first_name", "abc");
    StringEntity se = new StringEntity("JSON: " + json.toString());
    se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"Text"));
    put.setEntity(se);

    HttpResponse response = client.execute(put);
    System.out.println("\nSending 'PUT' request to URL : " + url);
    System.out.println("Put parameters : " + put.getEntity());
    System.out.println("Response Code : " + response.getStatusLine().getStatusCode());

   BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }

    System.out.println(result.toString());

我得到了以下错误:

发送'PUT'请求到URL:http://localhost:9200/testindex2/test/2放参数:[Content-Type: text/普通;charset=ISO-8859-1, Content-编码:Text, Content-Llong: 52,分块:false]响应代码: 400{"错误":{"root_cause":[{"type":"mapper_parsing_exception","原因":"解析失败}], type:"mapper_parsing_exception","原因":"解析失败","caused_by":{type:"not_x_content_exception","原因":"压缩器检测只能在某些x内容字节或压缩的x内容字节上调用"}},"状态": 400}

另外,当我从rest客户机尝试相同的代码时,它运行得很好,不知道为什么会出现这个问题。

共有3个答案

南门飞扬
2023-03-14

我也遇到了同样的错误,但在我的例子中,我实际上是在一个初始化容器的Kubernetes配置中执行类似的操作:

- args:
        - -XPUT
        - -k
        - {{.Values.kibana.env.ELASTICSEARCH_URL}}/.logtrail/config/1?pretty
        - -H
        - 'Content-Type: application/json'
        - --data
        - /etc/logtrail/logtrail.json

这里的问题是,当您在curl POST/PUT中指定一个文件时,它需要附加“@”。所以下面的配置工作了!

- args:
        - -XPUT
        - -k
        - {{.Values.kibana.env.ELASTICSEARCH_URL}}/.logtrail/config/1?pretty
        - -H
        - 'Content-Type: application/json'
        - --data
        - '@/etc/logtrail/logtrail.json'
聂炜
2023-03-14

Elastic search有专门的客户机来与Java一起工作。而且不需要手动生成JSON。此外,您没有描述导入部分,所以有点难以理解您使用的库。

艾敏学
2023-03-14

替换了

 StringEntity se = new StringEntity("JSON: " + json.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"Text"));

有了这个:

StringEntity se = new StringEntity(json.toString(),ContentType.APPLICATION_JSON);

它现在可以工作了

 类似资料:
  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 当我执行ps-aef grep elasticsearch HeapDumpOnOutOfMemoryError时看到了这一点 501 373 47 1 0 2:29pm ttys004 0:04.14/usr/bin/Java-xms4g-xmx4g-xss256k-djava.awt.headless=true-xx:+useparnewgc-xx:+useparnewgc-xx:+usepa

  • 我从ElasticSearch得到以下错误。 我在Ubuntu上运行Elasticsearch 1.7.2。 我做错了什么?

  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢

  • 它们在ES术语表中没有提及。 它们与其他ES实体(碎片/节点/索引)的关系是什么?

  • 很抱歉,但是ES的文档(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index.html)让我感到困惑。 多亏了术语表,我理解了数据库、表和行的术语,但我阅读了文档的大部分部分,但我找不到答案: 为什么需要在索引创建中添加和?我确实在这里查看了http://www.elasticsearch.org/g