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"
}
}
]
}
}
}
]