Java ElasticSearch查询没有';我不会有好结果的
我有数据结构:Java ElasticSearch查询没有';我不会有好结果的,java,
elasticsearch,Java,
elasticsearch,我有数据结构: { first_name: Ann, last_name: Smith } 我想使用查询搜索记录: 和:名字=安,姓氏=史密斯 或:名字=安或姓氏=史密斯 比如:first_name=n和last_name=mi 获取接受查询的总计数记录 我尝试使用Java代码进行搜索: Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").bui
{
first_name: Ann,
last_name: Smith
}
我想使用查询搜索记录:
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build();
TransportClient transportClient = new TransportClient(settings);
transportClient = transportClient.addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
Client client = transportClient;
SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("firstName", firstName));
SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("lastName", lastName));
MultiSearchResponse query = client.prepareMultiSearch()
.add(srb1)
.add(srb2)
.execute().actionGet();
for (MultiSearchResponse.Item item : query.getResponses()) {
SearchResponse response = item.getResponse();
System.out.println(response);
}
transportClient.close();
client.close();
但是我没有一个好结果。ElasticSearch Java API文档非常少。我认为您需要:
SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders
.boolQuery()
.must(QueryBuilders.termQuery("first_name", "Ann"))
.must(QueryBuilders.termQuery("last_name", "Smith")));
上述查询将为您提供first\u name=Ann和last\u name=Smith的结果
SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders
.boolQuery()
.should(QueryBuilders.termQuery("first_name", "Ann"))
.should(QueryBuilders.termQuery("last_name", "Smith")));
SearchRequestBuilder srb3 = client.prepareSearch().setQuery(QueryBuilders
.boolQuery()
.must(QueryBuilders.wildcardQuery("first_name", "n*"))
.must(QueryBuilders.wildcardQuery("last_name", "mi*")));
上述查询将为您提供first\u name=Ann或last\u name=Smith的结果
SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders
.boolQuery()
.should(QueryBuilders.termQuery("first_name", "Ann"))
.should(QueryBuilders.termQuery("last_name", "Smith")));
SearchRequestBuilder srb3 = client.prepareSearch().setQuery(QueryBuilders
.boolQuery()
.must(QueryBuilders.wildcardQuery("first_name", "n*"))
.must(QueryBuilders.wildcardQuery("last_name", "mi*")));
上面的查询将为您提供“名字以n开头,姓氏以mi开头”的结果
顺便说一句,prepareMultiSearch仅用于使用单个请求向ES发送多个搜索请求(减少通信开销)
请看那里:。您可以找到关于Elasticsearch、Lucene、Solr和相关项目的大量有用信息