当前位置: 首页 > 知识库问答 >
问题:

Spring Boot+Spring Data JPA+Spring Data ElasticSearch:弹性不返回任何结果

娄振
2023-03-14

我对将embedded Elasticsearch设置到Spring Boot应用程序中是新手,在Spring Boot应用程序中使用Postgres数据库设置Spring Data JPA。

我是否正确理解您需要不断地从数据库中索引搜索?本主题提供的答案通过Spring Data ElasticSearch批量索引Spring Data JPA条目到Elastic是否是唯一的解决方案:

下面是Application类:

@SpringBootApplication
@EnableJpaRepositories(basePackages = "eu.deniss.repository")
@ComponentScan
public class SpringDataElasticsearchDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringDataElasticsearchDemoApplication.class, args);
    }
}

人员实体类:

@Entity
@Document(indexName = "person", type = "person")
public class Person {
    private Long id;
    private String firstName;
    private String lastName;
    private String email;
    private String gender;
    private String ipAddress;

    @Id
    @org.springframework.data.annotation.Id
    @Column(name = "id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
...
}
public interface PersonSearchRepository extends ElasticsearchRepository<Person, Long> {
}
@Service
public class PersonServiceImpl implements PersonService {

    private final PersonRepository personRepository;
    private final PersonSearchRepository personSearchRepository;
    private final PersonMapper personMapper;

    private static final Logger log = Logger.getLogger(PersonServiceImpl.class);

    public PersonServiceImpl(PersonRepository personRepository, PersonSearchRepository personSearchRepository, PersonMapper personMapper) {
        this.personRepository = personRepository;
        this.personSearchRepository = personSearchRepository;
        this.personMapper = personMapper;
    }

...

    @Override
    @Transactional(readOnly = true)
    public Page<PersonDTO> search(String query, Pageable pageable) {
        log.info("Request to search for a page of People with a query " + query);
        Page<Person> result = personSearchRepository.search(queryStringQuery(query), pageable);
        return result.map(person -> personMapper.personToPersonDTO(person));
    }
}
@RestController()
@RequestMapping("/api")
public class PersonController {

    private final PersonService personService;
    private final Logger log = LoggerFactory.getLogger(PersonController.class);
    private static final String ENTITY_NAME = "person";

    public PersonController(PersonService personService) {
        this.personService = personService;
    }

    @GetMapping("/_search/people")
    public ResponseEntity<List<PersonDTO>> searchPeople(@RequestParam String query, Pageable pageable) throws URISyntaxException {
        log.info("REST request to search for a page of Appointments for query {} ", query);
        Page<PersonDTO> page = personService.search(query, pageable);
        HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, "/api/_search/people");
        return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
    }
}

共有1个答案

宗政小林
2023-03-14

答案很简单。

我必须执行从数据库中查询当前实体并将其保存到弹性搜索的批处理工作,方法是使用

personSearchRepository.save(person);
 类似资料:
  • 以下是我的疑问.... 我没有结果。 另外,我正在使用这个插件来生成请求正文。 我的查询如下所示.. null 感谢您到目前为止的阅读,如果有人能帮助我找出如何使这一工作,我将非常感谢。

  • 试图找出这个微不足道的例子的分数。我希望得到brenda eaton的文件,但我得到的是brenda fassie的最佳结果。

  • 创建新的。NET Framework 4.6.1控制台应用程序 为NEST 6.5.0和ElasticSearch.NET 6.5.0添加NuGet包 然后,我创建了一个新的弹性索引,其中包含具有“tags”属性的对象(类型为“mything”)。此标记是一组可能值中的随机逗号分隔的单词集。在测试中,我在索引中插入了100到5000项。我试了越来越少的可能的词在设置。

  • 我有一个问题,我想把弹性搜索的结果减少到1000个,不管有多少匹配的结果匹配,但这不应该影响排名和得分。 我在尝试,但这似乎只是告诉弹性搜索只获得前N个结果,而不考虑分数。如果我说错了,请纠正我。 有什么帮助吗? 编辑: 我已经在使用分页。因此,在From/Size中使用Size只会影响当前页面的大小。但我想将总结果的大小限制为1000,然后对其进行分页。

  • 本文向大家介绍Dapper.NET 执行不返回任何结果的命令,包括了Dapper.NET 执行不返回任何结果的命令的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我在HBASE有一张桌子。我和菲尼克斯一起创造的 然后我用spark填充它(我使用hortonworks shc-core连接器): 多谢帮忙。