【发布时间】:2015-10-07 15:01:44
【问题描述】:
我认为这是一个非常基本的问题,但我一直在房子周围转,所以任何帮助我指出正确方向的帮助将不胜感激。
我继承了一个 java 应用程序,它使用 spring-data-elasticsearch(目前为 1.2.1.RELEASE)构建和弹性搜索索引。我已经以各种简单的方式非常成功地修改了它,但现在我想添加一个自定义分析器以在一个字段上使用(用于删除 / 的字符映射)。
正在构建的索引本质上是 1 个具有各种文档类型的索引。它似乎是开箱即用的。我对 java 和 spring 还很陌生,但是跟踪所有配置和自动连接有时仍然会让我感到困惑,但据我所知,上下文 XML 文件中的客户端配置直接指向 spring 代码并且没有除了自定义索引名称和存储库接口和代码的位置之外,添加很多内容
<elasticsearch:node-client id="esClient" local="true" cluster-name="products"/>
<elasticsearch:repositories base-package="com.warehouse.es.repos"/>
<bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="esClient"/>
</bean>
然后代码似乎使用了一个开箱即用的客户端对象
@Autowired
public void setClient(Client client) throws IOException {
this.client = client;
然后继续使用映射文件设置各种类型映射
createTypeMapping(client, Constants.INDEX_NAME, INDEX_TYPE, "Products.mapping");
抱歉,如果其中的某些内容太简短(或者对于这个基本问题来说太多华夫饼),但我正在努力解决/找到一个示例,说明如何以及在何处添加我的自定义分析器。我有文档和示例向我展示如何创建一些 json 来创建自定义分析器 (例如https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-mapping-charfilter.html#analysis-mapping-charfilter 和一些以前的stackoverflow q&s)
但我很难理解我在创建索引的 java 代码中添加它的位置。
显然,帮助越多越好(!),但实际上在这个阶段,我正在尝试了解是否可以将分析器添加到 yml 文件中,或者是否需要添加一些代码来修改客户端某种方式?或者甚至可能只是将其添加到单个类型映射中。
谢谢。
【问题讨论】:
-
您是否有权访问 ES 集群本身?在您的 java 代码中,您是否有任何可能定义映射的 *.json 文件?
-
我可以访问集群。在这种情况下,它被写入目标文件夹中的独立集群,然后我将它(在开发环境中)复制到我的本地 es 数据文件夹中。有许多 .mapping 文件定义了类型,但没有定义更高级别的索引。也许我可以在这种类型级别添加一个客户分析器?例如 Products.mapping { "properties": { "created": { "type": "long" }, "Summary": { "type": "string", "analyzer": "standard" }, "relatedProducts" : { ...
-
我要确定的是索引/类型是直接在集群上创建的(比如运行
curl命令),还是索引/类型的创建由您的 Spring 应用程序处理.在后一种情况下,我认为您可以关注this link on github 中的一些代码示例。 -
是的,如果您有
Products.mapping的内容确实看起来像类型映射。但是,如果您通过添加新分析器更改类型映射,则需要重新索引集群中的任何数据。 -
好的太好了,所以我可以将它添加到类型映射文件中,其余的由 Spring 完成?!非常感谢。
标签: elasticsearch spring-data-elasticsearch