使用 Java API 定义自定义 ElasticSearch 分析器

发布于 2024-11-14 16:42:53 字数 566 浏览 1 评论 0原文

有没有办法使用 Java API 创建索引并指定自定义分析器?它支持在创建索引时添加映射,但我找不到一种方法来执行类似的操作,而不通过 HTTP PUT 发送 JSON:

curl -XPUT localhost:9200/twitter?pretty=true -d '{
"analysis": {
       "analyzer": {
            "steak" : {
                "type" : "custom", 
                "tokenizer" : "standard",
                "filter" : ["snowball", "standard", "lowercase"]
            }
        }
    }
}'

我可以使用 JSONBuilder 构建这样的查询,但我在 API 中找不到任何位置要运行它,据我所知, CreateIndexRequest 没有任何我可以使用的东西,client.admin().indices() 也没有。这样做的正确方法是什么?

Is there a way to create an index and specify a custom analyzer using the Java API? It supports adding mappings at index creation, but I can't find a way to do something like this without sending the JSON via HTTP PUT:

curl -XPUT localhost:9200/twitter?pretty=true -d '{
"analysis": {
       "analyzer": {
            "steak" : {
                "type" : "custom", 
                "tokenizer" : "standard",
                "filter" : ["snowball", "standard", "lowercase"]
            }
        }
    }
}'

I can build such a query using JSONBuilder, but I can't find no place in the API where to run it, CreateIndexRequest doesn't have anything I can use and neither does client.admin().indices(), as far as I can see. What's the right way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浪漫之都 2024-11-21 16:42:53

您可以使用 client.admin().indices().prepareCreate("twitter").setSettings(...) 设置分析器。构建设置的方法有多种。您可以从文本、地图加载它们,如果您想要的话,甚至可以使用 jsonBuilder:

client.admin().indices().prepareCreate("twitter")
            .setSettings(Settings.settingsBuilder().loadFromSource(jsonBuilder()
                .startObject()
                    .startObject("analysis")
                        .startObject("analyzer")
                            .startObject("steak")
                                .field("type", "custom")
                                .field("tokenizer", "standard")
                                .field("filter", new String[]{"snowball", "standard", "lowercase"})
                            .endObject()
                        .endObject()
                    .endObject()
                .endObject().string()))
            .execute().actionGet();

You can set analyzer using client.admin().indices().prepareCreate("twitter").setSettings(...). There are several ways to build settings. You can load them from text, map or even use jsonBuilder if that's what you want:

client.admin().indices().prepareCreate("twitter")
            .setSettings(Settings.settingsBuilder().loadFromSource(jsonBuilder()
                .startObject()
                    .startObject("analysis")
                        .startObject("analyzer")
                            .startObject("steak")
                                .field("type", "custom")
                                .field("tokenizer", "standard")
                                .field("filter", new String[]{"snowball", "standard", "lowercase"})
                            .endObject()
                        .endObject()
                    .endObject()
                .endObject().string()))
            .execute().actionGet();
一梦浮鱼 2024-11-21 16:42:53

如果您在测试环境中,您还可以使用此项目,它将根据 Java 注释创建索引。
https://github.com/tlrx/elasticsearch-test

If you are on a test environnent you can also uses this project which will create your indexes based on Java annotations.
https://github.com/tlrx/elasticsearch-test

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文