0

我一直在使用 elasticsearch-analysis-kuromoji 进行日语搜索,但我遇到了两个非常奇怪的行为,第一个是我搜索的字符不起作用,比如 - '输出贸易' 将不起作用,除非我将其传递为“输出出贸易易”,每个字符之间有空格。像 ント 这样的字符也不会被搜索。

这是我的配置:

            .setSettings(ImmutableSettings.settingsBuilder().loadFromSource(jsonBuilder()
                    .startObject()
                    .startObject("analysis")
                            //
                    .startObject("tokenizer")
                    .startObject("kuromoji_user_dict")
                    .field("type", "kuromoji_tokenizer")
                    .field("mode", "extended")
                    .field("discard_punctuation", "false")
                    .endObject()
                    .endObject()
                            //
                    .startObject("analyzer")
                    .startObject(JAPANESE_LANGUAGE_ANALYSIS)
                    .field("type", "custom")
                    .field("tokenizer", "kuromoji_user_dict")
                    .endObject()
                    .endObject()
                            //

                    .endObject()
                    .endObject().string()));

我是不是配置错了,还是我需要一个不同的标记器来表示字符,比如:'输出贸易和 ント'

谢谢你

4

1 回答 1

0

经过一些在线研究和 elasticsearch-analysis-kuromoji 团队的一些帮助后,我能够找到问题所在,即使我创建了分析师并告诉查询使用它,我还需要像这样添加映射:

XContentBuilder xbMapping =
        jsonBuilder()
                .startObject()
                .startObject(indexType)
                .startObject("properties")
                .startObject("source")
                .field("type", "string")
                .endObject()
                .startObject("text")
                .field("type", "string")
                .field("analyzer", JAPANESE_LANGUAGE_ANALYSIS)
                .endObject()
                .endObject()
                .endObject()
                .endObject();

elasticSearchClient.admin().indices()
        .preparePutMapping(indexName)
        .setType(indexType)
        .setSource(xbMapping)
        .execute().get();
于 2015-05-04T10:06:21.400 回答