elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java 弹性搜索-使用'搜索;edgeNGram';标记器

Java 弹性搜索-使用'搜索;edgeNGram';标记器,java,elasticsearch,Java,elasticsearch,我是弹性搜索新手,我正在使用JavaAPI。 下面是我面临的问题 下面是我更新的设置 "settings" : { "index.settings.analysis.tokenizer.str_search_tokenizer.max_gram" : "5", "index.settings.analysis.tokenizer.str_search_tokenizer.token_chars.1" : "digit", "index.settings.analysis.tokeni

我是弹性搜索新手,我正在使用JavaAPI。 下面是我面临的问题

下面是我更新的设置

"settings" : {
  "index.settings.analysis.tokenizer.str_search_tokenizer.max_gram" : "5",
  "index.settings.analysis.tokenizer.str_search_tokenizer.token_chars.1" : "digit",
  "index.settings.analysis.tokenizer.str_search_tokenizer.min_gram" : "2",
  "index.settings.analysis.analyzer.str_search_analyzer.tokenizer" : "str_search_tokenizer",
  "index.settings.analysis.tokenizer.str_search_tokenizer.token_chars.0" : "letter",
  "index.settings.analysis.tokenizer.str_search_tokenizer.type" : "edgeNGram",
  "index.number_of_shards" : "1",
  "index.number_of_replicas" : "2",
  "index.version.created" : "900299"
}
索引来源:

"_source" : {"message":"This message is sample of maximization","messageId":1}
搜索邮件的我的代码:

QueryBuilder queryBuilder = QueryBuilders.fuzzyLikeThisQuery("message").likeText("maximizat").analyzer("str_search_analyzer");
FilterBuilder builder = FilterBuilders.queryFilter(queryBuilder);
System.out.println(builder);
SearchResponse response = client.prepareSearch(indexName).setTypes(typeName).setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setFilter(builder).execute().actionGet();
System.out.println(response.getHits().getTotalHits());
当我提供像“maximization”、“maximization”、“maximization”这样的文本时,结果很好

若我提供的搜索文本少于10个字符,结果并没有出现

elasticsearch.yml文件中是否有任何需要更新的更改?
或者我的设置JSON或我的搜索查询有错误吗?

为什么要将fuzzy与ngrams一起使用?你能发布你当前的映射吗?模糊查询会扩展成一堆查询,当你的查询较短时,它们的扩展必须用完,因此找不到工作。为什么不增加edgeNGram-max_gram大小(这会增加rindex大小)并使用非扩展查询。正如ramseykhalaf提到的,fuzzy通过添加/删除字符以不可预知的方式扩展查询。请注意,EdgeGram用于自动建议/自动完成功能,如谷歌搜索。