2017-01-26 4 views
0

Ich habe eine Spring Boot-Anwendung mit einer Elasticsearch-Instanz verbunden, die this sample data enthält. Ich bin momentan in der Lage, nach einem bestimmten Feld zu suchen, aber in dem Moment, in dem ich das zweite in der Anfrage hinzufüge, habe ich keine Ergebnisse (jedes der Felder ist für sich alleine in Ordnung). Wie kann ich die richtigen Ergebnisse erhalten?ElasticSearch Spring Repository Suche mit mehreren Feldern

Hier sind meine Klassen:

@Document(indexName = "bank", type = "account", replicas = 0) 
public class Account { 

    @Id 
    private String id; 
    private long accountNumber; 
    private long balance; 
    private String firstname; 
    private String lastname; 
    private long age; 
    private String gender; 
    private String address; 
    private String employer; 
    private String email; 
    private String city; 
    private String state; 

} 


public interface AccountRepository extends ElasticsearchRepository<Account, String> { 

    Page<Account> findByGenderAndStateAllIgnoreCase(String gender, String state, Pageable pageable); 

} 


@Service 
public class AccountServiceImpl implements AccountService { 

    @Autowired 
    private AccountRepository repository; 

    @Override 
    public Account save(Account account) { 
     return repository.save(account); 
    } 

    @Override 
    public Account findOne(String id) { 
     return repository.findOne(id); 
    } 

    @Override 
    public Collection<Account> findAll(PageRequest request) { 
     return repository.findAll(request).getContent(); 
    } 

    @Override 
    public Collection<Account> findByGenderAndState(String gender, String state, PageRequest request) { 
     return repository.findByGenderAndStateAllIgnoreCase(gender, state, request).getContent(); 
    } 

} 


@Controller 
@RequestMapping("/bank") 
public class BankController { 

    @Autowired 
    private AccountService accountService; 

    @GetMapping("/accounts") 
    public 
    @ResponseBody 
    Collection<Account> accounts(@RequestParam(name = "gender", required = false, defaultValue = "*") String gender, 
           @RequestParam(name = "state", required = false, defaultValue = "*") String state, 
           @RequestParam(name = "page", required = false, defaultValue = "0") int page, 
           @RequestParam(name = "size", required = false, defaultValue = "10") int size) { 
     return accountService.findByGenderAndState(gender, state, new PageRequest(page, size)); 
    } 

} 

Hier ist die Abfrage, die zu Elasticsearch von Spring-Boot gesendet wird:

[ 
    { 
    "from": 20, 
    "size": 20, 
    "query": { 
     "bool": { 
     "must": [ 
      { 
      "query_string": { 
       "query": "f", 
       "fields": [ 
       "gender" 
       ], 
       "default_operator": "and" 
      } 
      }, 
      { 
      "query_string": { 
       "query": "dc", 
       "fields": [ 
       "state" 
       ], 
       "default_operator": "and" 
      } 
      } 
     ] 
     } 
    } 
    } 
] 

Antwort

0

Es stellte sich heraus, dass ich für die Seite # 1 wurde abfragt, statt # 0. Die Ergebnisse werden jetzt korrekt angezeigt.

Verwandte Themen