使用 JAVA 在我的项目中执行 Elasticsearch 的最佳方法是什么?

我对 elasticseach 完全陌生,我也通过以下两个程序制作了一些虚拟应用程序->

1>使用Spring数据elasticsearch(其中我不需要在后台运行elasticsearch),只需导入ElasticsearchRepository就可以进行crud操作。

但在这里我面临一个问题 - 我需要为每种类型的数据(假设 UserModel 和 UserAddressModel)使用一些字段(这将是静态的)创建不同的模型类。因此,如果稍后我需要在该类型中添加新数据,我还需要在模型类中添加该字段。

那么,我们可以让它变得动态吗???

2>在另一个应用程序中,我使用了JAVA TransportClient,通过它我可以进行 crud 操作并可以保存任何数据(此处不使用模型),我也可以动态添加新字段。

所以,我很困惑,根据生产水平的性能明智地进一步进行的最佳方法是什么?或者两者都一样?

使用TransportClient

public class UserResource {

TransportClient client;

public UserResource() throws UnknownHostException {
    client = new PreBuiltTransportClient(Settings.EMPTY)
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

}

@GetMapping("/insert/{id}")
public String insert(@PathVariable final String id) throws IOException {

    IndexResponse response = client.prepareIndex("employee", "id", id)
            .setSource(jsonBuilder()
                    .startObject()
                    .field("fname", "peter")
                    .field("lname", "parker")
                    .field("salary", 1200)
                    .field("teamName", "Development")
                    .endObject()
            )
            .get();
    return response.getResult().toString();
}


@GetMapping("/view/{id}")
public Map<String, Object> view(@PathVariable final String id) {
    GetResponse getResponse = client.prepareGet("employee", "id", id).get();
    System.out.println(getResponse.getSource());


    return getResponse.getSource();
}

@GetMapping("/update/{id}")
public String update(@PathVariable final String id) throws IOException {

    UpdateRequest updateRequest = new UpdateRequest();
    updateRequest.index("employee")
            .type("id")
            .id(id)
            .doc(jsonBuilder()
                    .startObject()
                    .field("gender", "male")
                    .endObject());
    try {
        UpdateResponse updateResponse = client.update(updateRequest).get();
        System.out.println(updateResponse.status());
        return updateResponse.status().toString();
    } catch (InterruptedException | ExecutionException e) {
        System.out.println(e);
    }
    return "Exception";
}

@GetMapping("/delete/{id}")
public String delete(@PathVariable final String id) {

    DeleteResponse deleteResponse = client.prepareDelete("employee", "id", id).get();

    System.out.println(deleteResponse.getResult().toString());
    return deleteResponse.getResult().toString();
}
}

使用Springdata Elasticsearch

public class SearchQueryBuilder {

@Autowired
private ElasticsearchTemplate elasticsearchTemplate;


public List<Users> getAll(String text) {

    QueryBuilder query = QueryBuilders.boolQuery()
            .should(
                    QueryBuilders.queryStringQuery(text)
                            .lenient(true)
                            .field("name")
                            .field("teamName")
            ).should(QueryBuilders.queryStringQuery("*" + text + "*")
                    .lenient(true)
                    .field("name")
                    .field("teamName"));

    NativeSearchQuery build = new NativeSearchQueryBuilder()
            .withQuery(query)
            .build();

    List<Users> userses = elasticsearchTemplate.queryForList(build, Users.class);

    return userses;
}

数据加载器:

public class Loaders {

@Autowired
ElasticsearchOperations operations;

@Autowired
UsersRepository usersRepository;

@Autowired
VideoRepository videoRepository;

@PostConstruct
@Transactional
public void loadAll(){


    operations.putMapping(Users.class);
    operations.putMapping(Videos.class);
    usersRepository.save(getData());
    videoRepository.save(getVideoData());

}

private List<Users> getData() {
    List<Users> userses = new ArrayList<>();
    userses.add(new Users("peter",123L, "Accounting", 12000L));

    return userses;
}

用户模型

@Document(indexName = "new", type = "users", shards = 1)
public class Users {

private String name;
private Long id;
private String teamName;
private Long salary;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getTeamName() {
    return teamName;
}

public void setTeamName(String teamName) {
    this.teamName = teamName;
}

public Long getSalary() {
    return salary;
}

public void setSalary(Long salary) {
    this.salary = salary;
}

用户存储库

public interface UsersRepository extends ElasticsearchRepository<Users, Long> {
}
老师

如果您有 Java 应用程序,那么高级 Java REST 客户端是您的最佳选择(https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.5/index.html)。

请注意,TransportClient 已被弃用,支持将在第 8 版中删除(请参阅https://www.elastic.co/guide/en/elasticsearch/client/java-api/master/transport-client.html)。因此,单独考虑比任何性能考虑都更重要。

静态和动态映射之间的选择是一个基本的选择——本身与 Spring elasticsearch 无关。如果您有动态映射,您可以考虑使用动态模板并取消提供字段映射。

过去,Spring ES 项目赶上 ES 版本有点慢,所以请注意,如果您使用 Spring 数据 ES,您升级 ES 版本的能力可能会受到影响。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我在 Java 中使用大内存的最佳实践是什么?

来自分类Dev

使用Firebase保存Java枚举的最佳方法是什么

来自分类Dev

使用Java解析行的最佳方法是什么?

来自分类Dev

使用Chef自动执行部署的最佳方法是什么

来自分类Dev

Elasticsearch-使用提示和其他过滤器搜索条件的最佳方法是什么?

来自分类Dev

使用Gradle在Android项目中混合Java + Scala的最简单方法是什么?

来自分类Dev

如果我只有.java文件,用它们制作项目的最佳方法是什么?

来自分类Dev

使用作曲家和资产将jQuery包含在symfony项目中的最佳方法是什么

来自分类Dev

对于Android Studio项目中使用的外部库,找到新版本的最佳方法是什么

来自分类Dev

在数据库引擎中使用栏杆来管理项目中的用户和公司的最佳方法是什么?

来自分类Dev

避免使用Java 8在lambda内部使用null的最佳方法是什么?

来自分类Dev

使用Java执行程序的正确方法是什么?

来自分类Dev

使用Java执行程序的正确方法是什么?

来自分类Dev

使用其中具有字段映射的Java String的最佳方法是什么?

来自分类Dev

在Java中使用线程安全集合时,处理并发问题的最佳方法是什么?

来自分类Dev

使用Java多线程,协调找到最佳结果的最有效方法是什么?

来自分类Dev

在Java应用程序中使用经过训练的LibSVM模型的最佳方法是什么?

来自分类Dev

使用Java 8将流聚合到一个DISTINCT的最佳方法是什么

来自分类Dev

使用Java Fx,创建搜索过滤器时搜索整数值的最佳方法是什么?

来自分类Dev

在Java中使用线程安全集合时,处理并发问题的最佳方法是什么?

来自分类Dev

使用其中具有字段映射的Java String的最佳方法是什么?

来自分类Dev

在Java流上执行过滤操作的结果是调用函数的最佳方法是什么

来自分类Dev

使用Ruby On Rails在Heroku上执行长任务的最佳方法是什么?

来自分类Dev

使用vb.net在大型excel文件上执行SQL查询的最佳方法是什么?

来自分类Dev

使用ASP.NET Identity执行CRUD的最佳方法是什么?

来自分类Dev

使用vb.net在大型excel文件上执行SQL查询的最佳方法是什么?

来自分类Dev

使用共享包构造Python项目的最佳方法是什么?

来自分类Dev

确保我不在OSX上使用任何不可用的API的最佳方法是什么?

来自分类Dev

使用CNN进行物体识别,训练我的模型的最佳方法是什么:照片或视频?

Related 相关文章

  1. 1

    我在 Java 中使用大内存的最佳实践是什么?

  2. 2

    使用Firebase保存Java枚举的最佳方法是什么

  3. 3

    使用Java解析行的最佳方法是什么?

  4. 4

    使用Chef自动执行部署的最佳方法是什么

  5. 5

    Elasticsearch-使用提示和其他过滤器搜索条件的最佳方法是什么?

  6. 6

    使用Gradle在Android项目中混合Java + Scala的最简单方法是什么?

  7. 7

    如果我只有.java文件,用它们制作项目的最佳方法是什么?

  8. 8

    使用作曲家和资产将jQuery包含在symfony项目中的最佳方法是什么

  9. 9

    对于Android Studio项目中使用的外部库,找到新版本的最佳方法是什么

  10. 10

    在数据库引擎中使用栏杆来管理项目中的用户和公司的最佳方法是什么?

  11. 11

    避免使用Java 8在lambda内部使用null的最佳方法是什么?

  12. 12

    使用Java执行程序的正确方法是什么?

  13. 13

    使用Java执行程序的正确方法是什么?

  14. 14

    使用其中具有字段映射的Java String的最佳方法是什么?

  15. 15

    在Java中使用线程安全集合时,处理并发问题的最佳方法是什么?

  16. 16

    使用Java多线程,协调找到最佳结果的最有效方法是什么?

  17. 17

    在Java应用程序中使用经过训练的LibSVM模型的最佳方法是什么?

  18. 18

    使用Java 8将流聚合到一个DISTINCT的最佳方法是什么

  19. 19

    使用Java Fx,创建搜索过滤器时搜索整数值的最佳方法是什么?

  20. 20

    在Java中使用线程安全集合时,处理并发问题的最佳方法是什么?

  21. 21

    使用其中具有字段映射的Java String的最佳方法是什么?

  22. 22

    在Java流上执行过滤操作的结果是调用函数的最佳方法是什么

  23. 23

    使用Ruby On Rails在Heroku上执行长任务的最佳方法是什么?

  24. 24

    使用vb.net在大型excel文件上执行SQL查询的最佳方法是什么?

  25. 25

    使用ASP.NET Identity执行CRUD的最佳方法是什么?

  26. 26

    使用vb.net在大型excel文件上执行SQL查询的最佳方法是什么?

  27. 27

    使用共享包构造Python项目的最佳方法是什么?

  28. 28

    确保我不在OSX上使用任何不可用的API的最佳方法是什么?

  29. 29

    使用CNN进行物体识别,训练我的模型的最佳方法是什么:照片或视频?

热门标签

归档