elasticsearch,Java,Json,elasticsearch" /> elasticsearch,Java,Json,elasticsearch" />

使用java和JSON查询elasticsearch

使用java和JSON查询elasticsearch,java,json,elasticsearch,Java,Json,elasticsearch,我正在使用ElasticSearch1.3.1,我想用JavaSpring和ElasticJavaAPI查询它 我使用Angularjs作为前端,我可以很好地查询elasticsearch 我想做的是: 1) 使用angularjs:ok为elasticsearch创建json查询 { "bool" : { "must" : [{"query_string" : { "query" : "***"}}], "must_not" : [

我正在使用ElasticSearch1.3.1,我想用JavaSpring和ElasticJavaAPI查询它

我使用Angularjs作为前端,我可以很好地查询elasticsearch

我想做的是:

1) 使用angularjs:ok为elasticsearch创建json查询

    {
    "bool" : {
        "must" : [{"query_string" : {   "query" : "***"}}],
        "must_not" : [
            {"term" : {"O_LIFESTAGE" : "lymphe" }}, 
            {"term" : {"O_SEX" : "m"}}, 
            {"term" : {"L_CONTINENT" : "europe" }}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbierparis"}}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbiercaen"}}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbiertoulouse"}}
        ]
    }
}
2) 调用JavaSpringRESTWeb服务并向其发送在1中创建的json查询:ok

3) web服务查询elasticsearch和在1)中创建的查询并保存结果(ID列表):我失败,我得到一个错误(嵌套异常为org.elasticsearch.Indexes.IndexMissingException:[donnees]缺失),代码如下:

Node node = nodeBuilder().clusterName("elasticsearch noeud 1").node();
Client client = node.client();
String myquery = "{\"bool\": {\"must\": [{\"query_string\": {\"query\": \"***\"}}],\"must_not\": [{\"term\": {\"O_LIFESTAGE\": \"lymphe\"}},{\"term\": {\"O_SEX\": \"m\"}},{\"term\": {\"L_CONTINENT\": \"europe\"}},{\"term\": {\"I_INSTITUTIONCODE\": \"herbierparis\"}},{\"term\": {\"I_INSTITUTIONCODE\": \"herbiercaen\"}},{\"term\": {\"I_INSTITUTIONCODE\": \"herbiertoulouse\"}}]}}";
//WrapperQueryBuilder querybuilder= new WrapperQueryBuilder(query) ;

//try to get it work with an easy query before trying with "myquery"
SearchResponse searchResponse = client.prepareSearch("donnees").setTypes("specimens").setQuery("{\"term\": {\"L_CONTINENT\": \"europe\"}}").execute().actionGet();

SearchHit[] results = searchResponse.getHits().getHits();
System.out.println("Current results: " + results.length);
for (SearchHit hit : results) {
    System.out.println("------------------------------");
    Map<String,Object> result = hit.getSource();   
    System.out.println(result);
}
node.close();
这是索引映射:

curl -XPUT 'localhost:9200/donnees/specimens/_mapping' -d '{
"specimens" : {
    "_all" : {"enabled" : true},
    "_index" : {"enabled" : true},
    "_id" : {"index": "not_analyzed", "store" : false},
    "properties" : { ... }}}'
数据导入:

curl -XPUT 'localhost:9200/_river/donnees_s/_meta' -d '{
 "type" : "jdbc",
 "jdbc" : {
    "index" : "donnees",
    "type" : "specimens",
    "url" : "jdbc:oracle:thin:@localhost:1523:recolnat",
     "user" : "user",
     "password" : "pass",
     "sql" : "select * from all_specimens_data"
 }}'
我尝试在java中执行的查询示例,在curl&JS中运行良好:

curl -XGET 'http://localhost:9200/donnees/specimens/_search?size=100000000' -d '
{
"fields" : ["O_OCCURRENCEID"],
"query" :     {
    "bool" : {
        "must" : [{"query_string" : {   "query" : "***"}}],
        "must_not" : [
            {"term" : {"O_LIFESTAGE" : "lymphe" }}, 
            {"term" : {"O_SEX" : "m"}}, 
            {"term" : {"L_CONTINENT" : "europe" }}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbierparis"}}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbiercaen"}}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbiertoulouse"}}
        ]
    }
}}'

我找不到我应该为“指标”放什么,谁应该是我的索引(唐尼),我甚至尝试了“唐尼”。 任何建议都是非常欢迎的。 还有,如果有人知道直接查询完整的“myquery”的人


感谢您的阅读和帮助

错误信息非常清楚:您的索引不存在

你确定你的群集名称吗?在java代码中,它被设置为
elasticsearch noeud 1
,这更像是一个节点名


您可能查询了错误的集群:尝试在
\u cluster/state
上使用curl检索集群名称进行比较。

使用angularjs创建的jsonquery查询elasticsearch的工作代码(jsonquery在java和JS elastic api中工作):

import static org.elasticsearch.node.NodeBuilder.*;
导入org.elasticsearch.action.search.SearchRequestBuilder;
导入org.elasticsearch.action.search.SearchResponse;
导入org.elasticsearch.action.search.SearchType;
导入org.elasticsearch.client.client;
导入org.elasticsearch.common.settings.ImmutableSettings;
导入org.elasticsearch.common.settings.settings;
导入org.elasticsearch.node.node;
导入org.elasticsearch.search.SearchHit;
...
设置设置=ImmutableSettings.settingsBuilder()
.put(“http.enabled”、“false”)
.put(“传输.tcp.端口”,“9300-9400”)
.put(“discovery.zen.ping.multicast.enabled”,“false”)
.put(“discovery.zen.ping.unicast.hosts”,“localhost”).build();
Node Node=nodeBuilder().client(true).设置(settings)
.clusterName(“elasticsearch”).node();
Client=node.Client();
//jsonquery是由angularjs提出的,比如:“{”bool\“:{”must\“:[{”query\u string\“:{”query\“:“***\”}],“must\u not\”:[{”term\“:{”O SEX\“:{”m\“},{”term\“:{”term\“:{”L\u大陆“:“amerique\”,{term\”,{“term\”:{”美国语:{I\u机构代码:{Herbiertouloouse\}”;
SearchRequestBuilder SearchRequestBuilder=client.prepareSearch(“donnees”).setSearchType(SearchType.DFS\u QUERY\u THEN\u FETCH).addField(“O\u OCCURRENCEID”).setQuery(jsonquery);
if(limit!=null){searchRequestBuilder.setSize(limit);}else{searchRequestBuilder.setSize(250000000);}
if(offset!=null){searchRequestBuilder.setFrom(offset);}else{searchRequestBuilder.setFrom(0);}
SearchResponse SearchResponse=searchRequestBuilder.execute().actionGet();
SearchHit[]results=searchResponse.getHits().getHits();
System.out.println(“当前结果:+results.length”);
int length=results.length;

对于(int rnum=1;rnum感谢您的帮助。这是我的elasticsearch服务器的一个捕获:我也运行了curl:我更改了java代码,但仍然出错。我对如何操作感到困惑:Node Node=nodeBuilder().clusterName(“elasticsearch”).Node();Client Client=Node.Client();SearchResponse=Client.prepareSearch(“donnees”).setTypes(“样本”).setQuery(“{\”term\”:{\“L\U大陆\”:“欧洲\”}}”).execute().actionGet();完整错误:谢谢您现在正在查询同一个集群(name
elasticsearch
)。您的新问题似乎与河流初始化有关。也许您应该为此打开另一个问题。您好。这对我来说是一个简单的查询:让我们开始一个复杂的bool&must查询
curl -XGET 'http://localhost:9200/donnees/specimens/_search?size=100000000' -d '
{
"fields" : ["O_OCCURRENCEID"],
"query" :     {
    "bool" : {
        "must" : [{"query_string" : {   "query" : "***"}}],
        "must_not" : [
            {"term" : {"O_LIFESTAGE" : "lymphe" }}, 
            {"term" : {"O_SEX" : "m"}}, 
            {"term" : {"L_CONTINENT" : "europe" }}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbierparis"}}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbiercaen"}}, 
            {"term" : {"I_INSTITUTIONCODE" : "herbiertoulouse"}}
        ]
    }
}}'
import static org.elasticsearch.node.NodeBuilder.*;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.node.Node;
import org.elasticsearch.search.SearchHit; 
...

Settings settings = ImmutableSettings.settingsBuilder()
                .put("http.enabled", "false")
                .put("transport.tcp.port", "9300-9400")
                .put("discovery.zen.ping.multicast.enabled", "false")
                .put("discovery.zen.ping.unicast.hosts", "localhost").build();

Node node = nodeBuilder().client(true).settings(settings)
        .clusterName("elasticsearch").node();
Client client = node.client();

//jsonquery is made by angularjs like : "{\"bool\" : {\"must\" : [{\"query_string\" : {\"query\" : \"***\"}}],\"must_not\" : [{\"term\" : {\"O_SEX\" : \"m\"}}, {\"term\" : {\"L_CONTINENT\" : \"amerique\"}}, {\"term\" : {\"I_INSTITUTIONCODE\" : \"herbiertoulouse\"}}]}}";

SearchRequestBuilder searchRequestBuilder = client.prepareSearch("donnees").setSearchType(SearchType.DFS_QUERY_THEN_FETCH).addField("O_OCCURRENCEID").setQuery(jsonquery);

if( limit != null ){    searchRequestBuilder.setSize(limit); }else{ searchRequestBuilder.setSize(250000000); }
if( offset !=null ){    searchRequestBuilder.setFrom(offset); }else{ searchRequestBuilder.setFrom(0); }

SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();

SearchHit[] results = searchResponse.getHits().getHits();
System.out.println("Current results: " + results.length);

int length = results.length;
for (int rnum = 1; rnum<=length;rnum++){
    SearchHit hit = results[rnum-1];
    System.out.println( hit.getFields().get("O_OCCURRENCEID").getValue()  );
}        
node.close();