elasticsearch中的Suggest用法

1、搜索自动补全(CompletionSuggestionBuilder)

    搜索自动补全,可以使用CompletionSuggestionBuilder类来处理。如果要使用CompletionSuggestionBuilder来做搜索提示的话需要在定义mapping的时候制定下字段的格式内容。

{
    "expJob":{
        "type":"completion",
        "analyzer":"ik_smart",
        "search_analyzer":"ik_smart",
        "payloads":true,
        "preserve_separators" : false,//那么建议将忽略空格之类的分隔符。
        "preserve_position_increments" : false,//如果建议项的第一个词使用的是停用词,并且我们使用了过滤停用词的分析器,需要把该项设置成false
    }
}

java API

 Client client = ElasticClientFactory.getClient();
        SearchRequestBuilder req = client.prepareSearch(index);
        req.setQuery(QueryBuilders.matchAllQuery());
        CompletionSuggestionBuilder csfb = new CompletionSuggestionBuilder("sug").field(field).text(value).size(100);//sug是提示器的名字,可以有多个suggest
        req.addSuggestion(csfb);
        SearchResponse suggestResponse = req.execute().actionGet();
        List<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>> results = suggestResponse.getSuggest().getSuggestion("sug").getEntries();
        System.out.println(JSON.toJSONString(suggestResponse));
        for (Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option> op : results) {
            Text text = op.getText();
            System.out.println(text.toString());
            List<? extends Suggest.Suggestion.Entry.Option> options = op.getOptions();
            for (Suggest.Suggestion.Entry.Option pp : options) {
                System.out.println("\t" + pp.getText() + "==>" + pp.getScore());
            }
        }
2、错别词纠正(TermSuggestionBuilder)

SearchResponse response = client.prepareSearch("wikipedia")
	.setQuery(QueryBuilders.matchAllQuery())
	.addSuggestion(new TermSuggestionBuilder("first_suggestion")
	.text("graphics designer")
	.field("_all")).execute().actionGet();
 for( Entry<? extends Option> entry : response.getSuggest().getSuggestion("first_suggestion").getEntries()) {
 System.out.println("Check for: " + entry.getText() + ". Options:")
 for( Option option : entry.getOptions()){
	System.out.println("\t" + option.getText());
 }
}
但是对中文效果不好。

3、短语错别纠正(PhraseSuggestionBuilder)

如果想对短语进行提示的胡可以使用PhraseSuggestionBuilder来做,PhraseSuggestionBuilder在TermSuggestionBuilder的基础上添加了额外的短语计算逻辑,从而可以返回完整的短语检疫而不是单个的词项建议。用法和TermSuggestionBuilder一样。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Elasticsearch,查询词提示(suggestion)功能是通过使用称为“Suggesters”(建议器)的功能来实现的。当启用查询词提示时,Elasticsearch会在内存维护一个特定的数据结构来支持快速的建议查询。 内存的使用情况主要取决于以下几个因素: 1. 索引大小:索引的大小会直接影响内存的使用情况。如果索引很大,那么建议器需要维护更多的数据结构来支持查询词提示,从而占用更多的内存。 2. 建议器类型:Elasticsearch提供了多种类型的建议器,如term、phrase、completion等。不同类型的建议器会使用不同的数据结构和算法,从而对内存的使用情况产生影响。 3. 数据分布:建议器需要根据数据分布来构建相关的数据结构。如果数据分布不均匀,可能需要更多的内存来存储相关信息。 为了控制内存的使用情况,可以考虑以下几个方面: 1. 硬件资源:确保Elasticsearch集群具有足够的内存资源,以满足建议器所需的内存需求。根据索引大小和查询负载,调整集群的硬件配置,以确保充足的内存可用性。 2. 索引优化:通过调整索引的分片和副本设置,以及优化查询性能,减少对内存的压力。 3. 控制建议器的参数:Elasticsearch提供了一些参数来控制建议器的行为,如size、sort等。根据实际需求,调整这些参数以控制返回结果的数量和排序方式。 4. 监控和优化:定期监控集群的内存使用情况,并根据需要进行优化。可以使用Elasticsearch提供的监控工具和API,如Elasticsearch集群健康API、节点状态API等。 总的来说,内存的使用情况会受到多个因素的影响,包括索引大小、建议器类型和数据分布等。通过合理配置硬件资源、优化索引和建议器参数,并进行监控和优化,可以控制和优化Elasticsearch查询词提示功能的内存使用情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值