我一直在尝试使用以下代码通过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客户机尝试相同的代码时,它运行得很好,不知道为什么会出现这个问题。
我也遇到了同样的错误,但在我的例子中,我实际上是在一个初始化容器的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'
Elastic search有专门的客户机来与Java一起工作。而且不需要手动生成JSON。此外,您没有描述导入部分,所以有点难以理解您使用的库。
替换了
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