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

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
}
我想使用查询搜索记录:

  • 和:名字=安,姓氏=史密斯
  • 或:名字=安或姓氏=史密斯
  • 比如:first_name=n和last_name=mi
  • 获取接受查询的总计数记录
  • 我尝试使用Java代码进行搜索:

    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和相关项目的大量有用信息