zoukankan      html  css  js  c++  java
  • Elasticsearch--建议器


    在考虑性能的情况下,允许用户的拼写错误,以及构建一个自动完成功能

    可用的建议器类型

    • term:更正每个传入的单词,在非短语查询中有用,比如单词条查询
    • phrase:工作的短语上,返回一个恰当的短语
    • completion:提供高效的自动完成功能

    包含建议器

    在查询的结果中获得建议。例如,使用match_all查询尝试为serlock holnes短语得到一个建议,该短语包含两个拼写错误的词条。

    {
        "query":{
            "match_all":{
    
            }
        },
        "suggest":{
            "first_suggestion":{
                "text":"serlock honles",
                "term":{
                    "field":"_all"
                }
            }
        }
    }
    

    如果想要从多个字段上得到建议,可以加入second_suggestion(或者其他名字),当然与first_suggestion同一级别。响应如下:

    {
        "suggest":{
            "first_suggestion":[
                {
                    "text":"serlock",
                    "offset":0,
                    "length":7,
                    "option":[
                        {
                            "text":"sherlock",
                            "score":0.7866684,
                            "freq":1
                        }
                    ]
                },
                {
                    "text":"honles",
                    "offset":8,
                    "length":6,
                    "option":[
                        {
                            "text":"holmes",
                            "score":0.7866684,
                            "freq":1
                        }
                    ]
                }
            ]
        }
    }
    

    这里只保留了最重要的部分,前面还有其他的输出信息。

    term建议器为text参数中的每个词条返回一个可能的建议列表。offset是原始单词在text参数中的偏移量。

    options数组包含了给定单词的建议,如果elasticsearch没有找到任何建议,它将为空。

    • text:该属性定义了建议的文本
    • score:定义了建议的得分,得分越高,建议越好
    • freq:建议的频率,代表了在我们执行查询的索引上,该单词出现在文档中的次数

    term建议器

    term建议器基于字符串的编辑距离

    term建议器的配置选项

    term建议器的常见配置项还可以用在基于term建议器的所有建议器上,如phrase建议器

    • text(必须):定义了希望得到建议的文本
    • field(必须):为哪个字段生成建议
    • analyzer:用于分析text参数提供的文本,如果不提供就使用field字段的分析器
    • size:默认是5,指定text参数中每天词条可以返回的建议的最大数字
    • sort:返回建议的排序方式,默认此选项设置成score,将首先按照得分排,然后按文档频率,最后按词条排。第二个可能值frequency,先按文档频率,然后按分数,最后按词条

    额外建议器选项

    • lowcase_terms:true时,把从text字段生成的所有经分析的词条变成小写
    • max_edits:默认2,指定词条允许的最大编辑距离,可选的值有1或2
    • prefix_len:默认1,增加这个值可以提高整体性能,因为需要处理更少数量的建议
    • min_word_len:默认4,指定返回的建议列表中词条的最少字符数
    • shard_size:默认是size参数的值,设定每个分片上应该读取的最大建议数量。如果设置的值比size参数的值大,会得到更准确的文档频率,但性能会降低

    phrase建议器

    term建议器基于词条纠正错误,但对短语不够好。phrase建议器基于term建议器,但添加了额外的短语计算逻辑。

    {
        "suggest":{
            "text":"sherlock holnes",
            "our_suggestion":{
                "phrase":{
                    "field":"_all"
                }
            }
        }
    }
    

    返回结果

    {
        "suggest":{
            "our_suggestion":[
                {
                    "text":"sherlock holnes",
                    "offset":0,
                    "length":15,
                    "option":[
                        {
                            "text":"sherlock holmes",
                            "score":0.7866684
                        }
                    ]
                }
            ]
        }
    }
    

    与term返回相比,返回的是一个短语。

    phrase建议器相比term建议器增加的额外选项。

    • max_errors:指定可纠正的短语中包含错误词条的最大数目、或最大百分比。可以设置成整型值或者0到1之间的浮点数。默认是1,意味着给点短语中最多包含1个错误拼写的词条。

    completion建议器

    该建议器允许创建自动完成功能,并且性能很好,这是因为可以在索引中存储复杂结构,而不是在查询时计算。

    为了使用该基于前缀的建议器,需要建立索引时引入一个completion的专用字段。假设建立一个自动完成功能来显示图书的作者。除了作者的名字以外,希望返回该作者写的图书的标示符,先创建一个author索引:

    使用completion类型定义ac字段,payload:随建议一起返回一个额外的选项信息。

    索引数据
    先插入两条数据

    input属性提供了建议器用来生成自动完成功能的输入信息,它将用于匹配用户的输入,output属性定义应该为文档返回什么数据

    查询索引中那个completion建议器数据
    想找作者名字以fyo开头的文档,可以执行

    可以看到,我们在_suggest端点执行命令,因为不想执行标准查询,只对自动完成结果感兴趣。执行结果如下:

    也可使用模糊查询来容忍拼写错误,在查询中包含一个额外的fuzzy节点。

    定制权重
    默认情况下,词频将用来决定前缀建议器返回文档的权重,然而这有时不是最好的方案,可以通过为定义成completion的字段指定一个weight属性来定义建议的权重。weight属性是一个整型值,越大建议越重要。为一个文档指定权重,命令如下:

    匹配到该文档的completion建议结果中该文档的权重都会是30。

  • 相关阅读:
    65 进程互斥锁的优化实现
    Linux多线程编程
    互斥锁和自旋锁
    64 进程互斥锁的初步实现(下)
    63 进程互斥锁的初步实现(中)
    Linux中断子系统
    62 进程互斥锁的初步实现(上)
    61 进程互斥锁的详细设计
    Linux进程调度的时机
    嵌入式领域linux作为实时操作系统的缺点(转)
  • 原文地址:https://www.cnblogs.com/51zone/p/9841009.html
Copyright © 2011-2022 走看看