当前位置: 首页 > 面试题库 >

在Java REST Client [6.5] API上的ES 6.5中通过映射创建索引

洪永长
2023-03-14
问题内容

我是elasticsearch的新手,并试图通过遵循文章https://www.elastic.co/blog/you-complete-
me
来集成应用程序的自动完成功能。

我遵循以下方法进行相同操作。

活动班

       public class Event {

        private Long eventId;
        private Long catalogId;
        private Long orgId;
        private String orgName;
        private String catalogName;
        private String name;
        private String eventStatus;
.....
    }

objectmapper用于将事件对象转换为json字符串。这是插入文档的代码

public String createEventDocument(Event document) throws Exception {
    IndexRequest indexRequest = new IndexRequest(INDEX, TYPE, document.idAsString())
            .source(convertEventDocumentToMap(document));
    //create mapping with a complete field
    IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
    return indexResponse.getResult().name();
}

转换代码

private Map<String, Object> convertEventDocumentToMap(Event evt) {
    return objectMapper.convertValue(evt, Map.class);
}

我想创建一个索引,并为name_suggest字段设置完成建议器。我怎样才能达到同样的目的?

任何帮助表示赞赏


问题答案:

这是执行相同操作的解决方案。首先使用映射器创建索引并插入数据

 public String createEventDocument(Event document) throws Exception {
    GetIndexRequest request = new GetIndexRequest();
    request.indices(INDEX);
    boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
    if(!exists){
        createIndexWithMapping();
    }
    IndexRequest indexRequest = new IndexRequest(INDEX, TYPE, document.idAsString())
            .source(convertEventDocumentToMap(document));
    //create mapping with a complete field
    IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
    return indexResponse.getResult().name();
}

private boolean createIndexWithMapping() throws IOException {
            CreateIndexRequest createIndexRequest = new CreateIndexRequest(INDEX);
    XContentBuilder builder = XContentFactory.jsonBuilder();
    builder.startObject();
    {
        builder.startObject( "properties" );
        {
            builder.startObject( "name_suggest" );
            {
                builder.field( "type", "completion" );
            }
            builder.endObject();
        }
        builder.endObject();
    }
    builder.endObject();
    createIndexRequest.mapping(TYPE,builder);
    createIndexRequest.timeout(TimeValue.timeValueMinutes(2));
    CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
    return createIndexResponse.isAcknowledged();

}


 类似资料:
  • 我是弹性搜索的新手,并试图通过以下文章为应用程序集成自动完成功能:https://www.elastic.co/blog/you-complete-me。 我也遵循下面的方法来做同样的事情。 感谢任何帮助

  • 问题内容: 我正在尝试使用mongodb- river使用以下命令在elasticsearch中为mongodb编制索引,但文档映射未生效。它仍然使用默认的分析器(标准)作为字段 Mongodb-river 该文档指定了索引的创建,但是没有有关如何提供自定义映射的文档。这就是我尝试过的。是否有其他文档可以找到如何在使用mongodb- river的过程中指定自定义分析器等。 如果我按全字词搜索,但

  • 问题内容: 我正在努力完成索引创建这一简单任务,目标是使用分析器和字段映射创建索引。当我使用分析器创建索引时,我可以通过分析api调用与分析器通信,但是当我添加映射信息时,创建索引调用失败,并显示“字段[$ field]]找不到Analyzer [analyzer1]”,我创建了一个脚本来显示问题: 问题答案: 我相信您的问题是这些设置需要嵌套在JSON的一个节点内,而不是您所拥有的嵌套在一个节点

  • 我使用的是弹性搜索版本7.1.0和NEST 6.7.0以及ElasticSearch.NET 6.7.0。当我试图创建索引时,我出现了一个错误。 这是我的代码,我在NEST和ElasticSearch.NET 6.4.0版上使用了相同的代码,并且运行良好 null 代码400来自:PUT/local_brainbank_index。servererror:type:mapper_parsing_e

  • 问题内容: 我想知道是否可以使用其API在Jenkins中创建新用户。我可以创建作业,但Jenkins的API文档与用户创建没有任何关系。 实际上,我必须先创建一个新用户,然后为该用户创建一个新作业,所有这些工作均使用API​​。 问题答案: 没错,没有用于添加用户的显式CLI命令。但是您可以为此使用groovy脚本(使用CLI执行)。 详细信息取决于您的Jenkins的配置方式。例如,如果您的J

  • 我想运行一个我已经创建并上传到docker hub上的图像。是否可以在lxc/lxd上运行该映像?基本上,我想在docker和lxc之间进行性能比较。 我已经安装了skopeo、umoci、go-md2man和jq。 现在,当我尝试运行命令lxc create c1-toci–--url时docker://awaisaz/test:part2它给出了信任策略错误/etc/容器/政策。json不是这