将自定义分析器添加到使用 spring 构建的索引的基础知识

Basics of adding a custom analyzer to an index built using spring

我认为这是一个非常基本的问题,但我一直在房子里转来转去,所以任何帮助我指出正确方向的人都将不胜感激。

我继承了一个 java 应用程序,它使用 spring-data-elasticsearch(目前为 1.2.1.RELEASE)构建弹性搜索索引。我已经通过各种简单的方式非常成功地修改了它,但现在我想添加一个自定义分析器以在一个字段上使用(字符映射以删除 /'s)。

正在构建的索引本质上是 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 和一些以前的 Whosebug 问答)

但我很难理解我在创建索引的 java 代码中添加它的位置。

显然帮助越多越好 (!) 但实际上在这个阶段我正在尝试掌握是否可以将分析器添加到 yml 文件或者是否需要添加一些代码来修改客户以某种方式?或者甚至可能只是将其添加到单个类型映射中。

谢谢。

如果 index/type 是直接在集群上创建的(例如 运行 一个 curl 命令)或者如果 index/type 的创建是由您的 Spring 应用程序。在后一种情况下,我认为您可以遵循 this link on github.

中的一些代码示例

如果您有 Products.mapping 文件,其中的内容确实看起来像类型映射。但是,如果您通过添加新分析器来更改类型映射,那么您集群中的任何数据都需要重新编制索引。

使用海报发现进行编辑: 将设置放入项目的各个映射文件中,但作为带有 @settings 注释的单独文件。