Elasticsearch 高手之路
  • Introduction
  • First Chapter
  • 1.ElasticSearch 5.x 安装
    • 1.1.Window 环境
    • 1.2.Linux 环境
  • 2.基础学前班
  • 3.基础
    • 3.1.配置文件
    • 3.2.Mapping
      • 3.2.1.字段的数据类型
        • 3.2.1.1.核心数据类型
        • 3.2.1.2.复合数据类型
        • 3.2.1.3.Geo地理数据类型
        • 3.2.1.4.特定数据类型
      • 3.2.2.Meta-Fields(元字段)
        • _index,_uid,_type,_id 元字段
        • _source,_size 元字段
        • _all, _field_names元字段
        • _parent,_routing 元字段
        • _meta 元字段
      • 3.2.3.Mapping parameters(映射参数)
        • analyzer(分析器)
        • normalizer(归一化)
        • boost(提升)权重
        • Coerce(强制类型转换)
        • copy_to(合并参数)
        • doc_values(文档值)
        • dynamic(动态设置)
        • enabled(开启字段)
        • fielddata(字段数据)
        • format (日期格式)
        • ignore_above(忽略超越限制的字段)
        • ignore_malformed(忽略格式不对的数据)
        • include_in_all(_all 查询包含字段)
        • index_options(索引设置)
        • index (索引)
        • fields(字段)
        • norms (标准信息)
        • null_value(空值)
        • position_increment_gap(短语位置间隙)
        • properties (属性)
        • search_analyzer (搜索分析器)
        • similarity (相似度模型)
        • store(存储)
        • term_vectors(词根信息)
      • 3.2.4.Dynamic Mapping(动态映射)
        • _default_ mapping(mapping中的_default_)
        • Dynamic field mapping(动态字段映射)
        • Dynamic templates(动态模板)
        • Override default template(覆盖默认模板)
    • 3.3. Analysis(分析)
      • 3.3.1.Anatomy of an analyzer(分析器的分析)
      • 3.3.2.Testing analyzers(测试分析器)
      • 3.3.3.Analyzers(分析器)
        • Configuring built-in analyzers(配置内置分析器)
        • Standard Analyzer(标准分析器)
        • Simple Analyzer(简单分析器)
        • Whitespace Analyzer(空格分析器)
        • Stop Analyzer(停止词分词器)
        • Keyword Analyzer(关键词分析器)
        • Pattern Analyzer(模式分析器)
        • Language Analyzers(语言分析器)
        • Fingerprint Analyzer(指纹分析器)
        • Custom Analyzer(自定义分析器)
      • 3.3.4. Tokenizers(分词器)
        • Standard Tokenizer(标准分词器)
        • Letter Tokenizer
        • Lowercase Tokenizer (小写分词器)
        • Whitespace Tokenizerr (空格分词器)
        • UAX URL Email Tokenizer
        • Classic Tokenizer
        • Thai Tokenizer(泰语分词器)
        • NGram Tokenizer
        • Edge NGram Tokenizer
        • Keyword Tokenizer(关键词分词器)
        • Pattern Tokenizer(模式分词器)
        • Path Hierarchy Tokenizer(路径层次分词器)
      • 3.3.5.Token Filters(词语过滤器)
      • 3.3.5.补充1:Token Filters(词语过滤器)
      • 3.3.5.补充2:Token Filters(词语过滤器)
      • 3.3.6.Character Filters(字符过滤器)
        • HTML Strip Character Filter(HTML标签过滤)
        • Mapping Character Filter(字符替换映射)
        • Pattern Replace Character Filter(正则替换字符)
    • 3.4. APIs
      • 3.4.1.索引 APIs (Indices APIs)
        • 创建/删除/获取->索引
        • 启动关闭/缩小/滚动->索引
        • 提交/获取/获取字段->映射
        • 索引->别名/是否存在/类型存在
        • 更新索引/获取->设置(未完成)
        • 分析器、索引模板(未完成)
        • Shadow replica indices 卷影副本索引
        • 索引->统计信息/段
        • 索引->恢复/分片存储
        • 清理缓存/刷新/同步刷新
        • 重新加载/强制合并
      • 3.4.2.文档 APIs (Document APIs)
        • 读写文档(Reading and Writing documents)
        • 索引文档 API
        • 获取/批量获取->文档
        • 删除/根据查询API删除
        • 更新/根据查询API更新
        • Bulk API(批量操作)
        • Reindex API(复制索引)
        • Term Vectors(词条向量)/Multi termvectors API
        • ?refresh
      • 3.4.3.搜索 APIs (Search APIs)
        • Search / URI Search
        • Request Body Search(未完成)
          • Query / From / Size
          • Sort / Source filtering
          • Fields / Script Fields / Doc value Fields
          • Post filter
          • Highlighting
          • Rescoring / Search Type
          • Scroll
          • Preference / Explain
          • Version / Index Boost
          • min_score / Named Queries
          • Inner hits / Search After
          • Field Collapsing 字段折叠
        • Search 模板/Multi Search 模板
        • Search Shards API
        • Suggesters
          • Term suggester
          • Phrase Suggester
          • Completion Suggester
          • Context Suggester
          • 返回suggester的类型
        • Multi Search API
        • Count API
        • Validate API
        • Explain API
        • Profile API
          • Profiling Queries
          • Profiling Aggregations
          • Profiling Considerations
        • Percolator / Field stats API
        • Field Capabilities API
    • 3.5.Query DSL(DSL方式查询)
      • 3.5.1.查询和过滤上下文
      • 3.5.2.Match All 查询
      • 3.5.3.全文搜索(Full Text Search)
        • 匹配查询(Match Query)
        • 短语匹配查询(Match Phrase Query)
        • 短语前缀匹配查询(Match Phrase Prefix Query)
        • 多字段查询(Multi Match Query)
        • 常用术语查询(Common Terms Query)
        • (Query String Query) 未完成
      • 3.5.4.Term级别查询(Term level queries)
        • Term 查询
        • Terms 查询
        • Range 查询(范围查询)
        • Exists 查询(非空值查询)
        • Prefix 查询(前缀查询)
        • Wildcard 查询(通配符查询)
        • Regexp 查询(正则表达式查询)
        • Fuzzy 查询(模糊查询)
        • Type Query(类型查询)
        • Ids Query(ID 查询)
      • 3.5.5.复合查询(Compound queries)
        • Constant Score 查询
        • Bool 查询
        • Dis Max 查询
        • Function Score 查询
        • Boosting 查询
        • Indices 查询
      • 3.5.6.Joining 查询(连接查询)
        • Nested Query(嵌套查询)
        • Has Child Query
        • Has Parent Query
        • Parent Id Query
      • 3.5.7.地理位置查询 (Geo queries)
        • GeoShape Query(地理形状查询)
        • Geo Bounding Box Query(地理边框查询)
        • Geo Distance Query(地理距离查询)
        • Geo Distance Range Query(地理距离范围查询)
        • Geo Polygon Query(地理多边形查询)
      • 3.5.8.专业查询(Specialized queries)
      • 3.5.9.Span 查询
        • Span Term 查询
        • Span Multi Term 查询
        • Span First 查询
        • Span Near 查询
        • Span Or 查询
        • Span Not 查询
        • Span Containing 查询
        • Span Within 查询
        • Span Field Masking 查询
    • 3.6.Aggregations(聚合分析)
      • 3.6.1.量度聚合(Metric Aggregations)
        • 平均值聚合(Avg Aggregation)
        • 基数聚合(Cardinality Aggregation)
        • 扩展统计聚合( Extended Stats Aggregation)
        • 地理边界聚合(Geo Bounds Aggregation)
        • 地理重心聚合(Geo Centroid Aggregation)
        • 最大值聚合(Max Aggregation)
        • 最小值聚合(Min Aggregation)
        • Percentiles Aggregation
        • Percentile Ranks Aggregation
        • Scripted Metric Aggregation
        • Stats Aggregation
        • 总和聚合(Sum Aggregation)
        • Top hits Aggregation
        • Value Count Aggregation
      • 3.6.2.桶聚合(Bucket Aggregations)
        • 邻接矩阵聚合(Adjacency Matrix Aggregation)
        • Children Aggregation
        • 日期直方图聚合(Date Histogram Aggregation)
        • 日期范围聚合(Date Range Aggregation)
        • 多元化的采样器聚集(Diversified Sampler Aggregation)
        • 过滤器聚合(Filter Aggregation)
        • 多过滤器聚合(Filters Aggregation)
        • 地理距离聚合(Geo Distance Aggregation)
        • GeoHash网格聚合(GeoHash grid Aggregation)
        • 全局聚合(Global Aggregation)
        • 直方图聚合(Histogram Aggregation)
        • IP范围聚合(IP Range Aggregation)
        • 丢失字段聚合(Missing Aggregation)
        • 嵌套聚合(Nested Aggregation)
        • 范围聚合(Range Aggregation)
        • Reverse nested Aggregation
        • 采样聚合(Sampler Aggregation)
        • Significant Terms Aggregation
      • 3.6.3.管道聚合(Pipeline Aggregations)
        • 平均值桶聚合( Avg Bucket Aggregation)
        • 导数聚合(Derivative Aggregation)
        • 最大值桶聚合(Max Bucket Aggregation)
        • 最小值桶聚合(Min Bucket Aggregation)
        • 总和桶聚合(Sum Bucket Aggregation)
        • 统计桶聚合(Stats Bucket Aggregation)
        • 扩展信息桶聚合(Extended Stats Bucket Aggregation)
        • 百分数桶聚合(Percentiles Bucket Aggregation)
        • Moving Average Aggregation
        • 累积汇总聚合(Cumulative Sum Aggregation)
        • 桶脚本聚合(Bucket Script Aggregation)
        • 桶选择器聚合(Bucket Selector Aggregation)
        • 串行差异聚合(Serial Differencing Aggregation)
      • 3.6.4.矩阵聚合(Matrix Aggregations)
        • 矩阵统计(Matrix Stats)
      • 3.6.5.缓存频繁聚合(Caching heavy aggregations)
      • 3.6.6.仅返回需要聚合的结果(Returning only aggregation results)
      • 3.6.7.聚合元数据(Aggregation Metadata)
      • 3.6.8.返回聚合的类型(Returning the type of the aggregation)
    • Glossary of terms (词汇表)
    • 未完成的任务
  • 4.基础补充总结
    • 3.2.Mapping
    • 3.3.分析器与定义自己的分析器(Analyzer)
  • 原理
  • 实战
    • 结构化搜索
    • 聚合分析
    • 数据建模
    • 应用场景
  • PHP API
    • 安装与快速入门
    • 配置
    • 实战
  • 资料
  • 笔记
    • 1.x 升级 2.x
Powered by GitBook
On this page
  • 基本短语 suggest API 参数
  • 平滑(smothing)模型
  • 候选生成器( Generators)
  • 直接生成器(Generators)

Was this helpful?

  1. 3.基础
  2. 3.4. APIs
  3. 3.4.3.搜索 APIs (Search APIs)
  4. Suggesters

Phrase Suggester

为了理解suggestions的形式,请先阅读suggestions第一页。

术语suggester提供了一种非常方便的 API ,以在某个字符串距离内在每个token的基础上访问字替换。 API 允许单独访问流中的每个token,而suggest 选择由API使用者选择。 然而,通常需要预先选择的suggestions以呈现给最终用户。 短语suggester在termsuggester之上添加额外的逻辑以选择整个经校正的短语,而不是基于ngram-language模型加权的单个token。 在实践中,这个suggester将能够基于共现和频率来做出关于选择哪些token的更好的决定。

API 示例

一般来说,phrasesuggester 需要前面的特殊映射。 此页面上的phrasesuggester示例需要以下映射才能正常工作。 仅在最后一个示例中使用反向(reverse)分析器。

PUT test
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "analysis": {
        "analyzer": {
          "trigram": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": ["standard", "shingle"]
          },
          "reverse": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": ["standard", "reverse"]
          }
        },
        "filter": {
          "shingle": {
            "type": "shingle",
            "min_shingle_size": 2,
            "max_shingle_size": 3
          }
        }
      }
    }
  },
  "mappings": {
    "test": {
      "properties": {
        "title": {
          "type": "text",
          "fields": {
            "trigram": {
              "type": "text",
              "analyzer": "trigram"
            },
            "reverse": {
              "type": "text",
              "analyzer": "reverse"
            }
          }
        }
      }
    }
  }
}
POST test/test?refresh=true
{"title": "noble warriors"}
POST test/test?refresh=true
{"title": "nobel prize"}

一旦你设置了分析器和映射,你可以在同一个地方使用phrasesuggester,你可以使用term suggester:

POST _suggest
{
  "text": "noble prize",
  "simple_phrase": {
    "phrase": {
      "field": "title.trigram",
      "size": 1,
      "gram_size": 3,
      "direct_generator": [ {
        "field": "title.trigram",
        "suggest_mode": "always"
      } ],
      "highlight": {
        "pre_tag": "<em>",
        "post_tag": "</em>"
      }
    }
  }
}

该响应包含由最可能的拼写纠正评分的 suggestions 。 在这种情况下,我们收到了预期的校正“诺贝尔奖”。

{
  "_shards": ...
  "simple_phrase" : [
    {
      "text" : "noble prize",
      "offset" : 0,
      "length" : 11,
      "options" : [ {
        "text" : "nobel prize",
        "highlighted": "<em>nobel</em> prize",
        "score" : 0.5962314
      }]
    }
  ]
}

基本短语 suggest API 参数

field

用于对语言模型进行n元语法查找的字段的名称,suggester将使用此字段获取统计信息以对校正进行评分。 此字段是必填字段。

gram_size

在字段中设置 n-gram(shingles)的最大大小。 如果字段不包含n-gram(shingles),则应省略或设置为1.请注意,Elasticsearch尝试根据指定的字段检测克大小。 如果字段使用shingle过滤器,则如果未明确设置,则将gram_size设置为max_shingle_size。

real_word_error_likelihood

即使词语存在于字典中,词语是拼写错误的可能性。 默认是0.95对应5%的真实单词拼写错误。

confidence

置信水平定义了应用于输入短语分数的因子,其被用作其他suggest候选的阈值。 只有得分高于阈值的候选人才会包括在结果中。 例如,1.0的置信水平将仅返回得分高于输入短语的suggestions。 如果设置为0.0,则返回前N个候选。 默认值为1.0。

max_errors

为了形成校正,最多被认为是拼写错误的术语的最大百分比。 此方法接受范围[0..1]中的浮点值作为实际查询项的分数或作为查询项的绝对数量的数字> = 1。 默认值设置为1.0,对应于只返回最多1个拼写错误项的更正。 请注意,将其设置过高可能会对性能产生负面影响。 推荐使用低值,例如1或2,否则suggestions调用的时间花费可能超过查询执行的时间花费。

separator

用于分隔bigram字段中的术语的分隔符。 如果未设置,则使用空格字符作为分隔符

size

为每个单独查询项生成的候选数量低数字(如3或5)通常会产生良好的结果。 提高这个可以带来更高的编辑距离的术语。 默认值为5。

analyzer

将分析器设置为分析以使用suggest文本。 默认为通过字段传递的suggest字段的搜索分析器。

shard_size

设置要从每个单独的分片检索的suggestions字词的最大数量。 在减少阶段期间,基于size选项只返回前N个suggestions。 默认为5。

text

设置文本/查询以提供suggestions。

highlight

设置suggestion高亮显示。 如果未提供,则不返回高亮显示的字段。 如果提供,必须包含完全pre_tag和post_tag包裹改变的标记。 如果一行中的多个标记被改变,则改变的标记的整个短语被包装,而不是每个标记。

collate

POST _suggest
{
  "text" : "noble prize",
  "simple_phrase" : {
    "phrase" : {
      "field" :  "title.trigram",
      "size" :   1,
      "direct_generator" : [ {
        "field" :            "title.trigram",
        "suggest_mode" :     "always",
        "min_word_length" :  1
      } ],
      "collate": {
        "query": { ①
          "inline" : {
            "match": {
              "{{field_name}}" : "{{suggestion}}" ②
            }
          }
        },
        "params": {"field_name" : "title"}, ③
        "prune": true ④
      }
    }
  }
}

① 所有这三个元素都是可选的。

② 变量将会被每个suggestion文本所代替。

③ 额外的 field_name变量已经在params中被指定,并且被match查询所使用。

④ 所有的suggestions将和一个额外的collate_match选项一起返回,表示是否生成的短语匹配任何文档。

field_name

平滑(smothing)模型

短语suggester支持多个平滑模型来平衡重量不频繁grams(grams(瓦)不存在于索引中)和频繁grams(在索引中至少出现一次)。

stupid_backoff

简单的回退模型,如果高阶计数为0并且通过常数因子折扣低阶n-gram模型,则回退到低阶n-gram模型。 默认折扣为0.4。 Stupid Backoff是默认模型。

laplace

使用添加平滑的平滑模型,其中将常数(通常为1.0或更小)添加到所有计数以平衡权重。默认α为0.5。

linear_interpolation

平滑模型,其基于用户提供的权重(lambdas)获取单字组,双字组和三字母组的加权平均值。 线性插值没有任何默认值。 必须提供所有参数(trigram_lambda,bigram_lambda,unigram_lambda)。

候选生成器( Generators)

短语suggester使用候选生成器来产生给定文本中每个术语的可能术语的列表。 单个候选生成器类似于对文本中的每个单独术语调用的术语suggester 。 生成器的输出随后与来自其他项的候选一起被评分以用于suggestions候选。

目前只支持一种类型的候选生成器,direct_generator。 PhrasesuggestionsAPI接受在关键direct_generator下的生成器列表,列表中的每个生成器在原始文本中被称为每个term。

直接生成器(Generators)

直接生成器支持以下参数:

field

从中获取候选suggestions的字段。 这是必需的选项,需要设置全局或每个 suggestion 。

size

每个suggestion文本标记返回的最大更正值。

suggest_mode

suggest模式控制在每个分片上生成的suggestions中包括哪些suggestions。 除了always之外的所有值都可以被认为是优化以生成更少的 suggestions 以在每个碎片上测试,并且在组合在每个碎片上生成的suggestions时不被重新检查。 因此,对于不包含它们的分片,即使其他分片包含它们,也会生成对分片的suggestions。 这些应该使用信心过滤掉。 可以指定三个可能的值:missing: 仅生成不在f中的术语的suggestions。 这是默认值。popular: 只suggest在 shard 的更多文档中出现的术语,而不是原始术语always:根据suggestions文字中的字词suggest任何相符的suggestions。

max_edits

最大编辑距离候选suggestions可以具有,以便被认为是suggestion。 只能是介于1和2之间的值。任何其他值都会导致抛出错误的请求错误。 默认为2。

prefix_length

必须匹配的最小前缀字符的数量是候选suggestions。 默认值为1.增加此数字可提高拼写检查性能。 通常拼写错误不会出现在术语的开头。 (旧名称“prefix_len”已弃用)

min_word_length

suggest文本术语必须包含的最小长度。 默认值为4.(旧名称“min_word_len”已弃用)

max_inspections

用于乘以shards_size以便在碎片级别上检查更多候选拼写校正的因子。 可以以性能为代价提高精度。 默认为5。

min_doc_freq

suggestion应该出现的文档数量的最小阈值。这可以指定为绝对数字或文档数量的相对百分比。 这可以通过仅提示高频项来提高质量。 默认值为0f,未启用。 如果指定的值大于1,则该数字不能为小数。 分片级文档频率用于此选项。

max_term_freq

suggestion文本标记可以存在的文档数量中的最大阈值,以便包括。 可以是表示文档频率的相对百分比数字(例如0.4)或绝对数字。 如果指定的值大于1,则不能指定小数。 默认为0.01f。 这可以用于排除高频术语的拼写检查。 高频项通常拼写正确,这也提高了拼写检查的性能。 分片级文档频率用于此选项。

pre_filter

应用于传递到该候选生成器的每个令牌的过滤器(分析器)。 在生成候选项之前,此过滤器应用于原始令牌。

post_filter

在它们被传递给实际短语记分器之前应用于每个生成的令牌的过滤器(分析器)。

他下面的例子显示了一个短语suggest 用两个生成器调用,第一个使用包含普通索引术语的字段,第二个使用使用索引与反向过滤器的术语的字段(令牌是相反顺序的索引)。 这用于克服直接发电机的限制,需要恒定的前缀来提供高性能suggestions。 pre_filter 和 post_filter 选项接受普通分析器名称。

POST _suggest
{
  "text" : "obel prize",
  "simple_phrase" : {
    "phrase" : {
      "field" : "title.trigram",
      "size" : 1,
      "direct_generator" : [ {
        "field" : "title.trigram",
        "suggest_mode" : "always"
      }, {
        "field" : "title.reverse",
        "suggest_mode" : "always",
        "pre_filter" : "reverse",
        "post_filter" : "reverse"
      } ]
    }
  }
}

pre_filter和post_filter也可以用于在生成候选项之后注入同义词。 例如,对于查询caption usq,我们可以为项usq生成候选 usa,这是 america 的同义词,其允许如果该短语得分足够高则向用户呈现captain america。

PreviousTerm suggesterNextCompletion Suggester

Last updated 5 years ago

Was this helpful?

检查针对指定查询的每个suggestion,以修剪索引中没有匹配的文档的suggestions。 对于suggestion的整理查询仅在从中生成suggestion的本地碎片上运行。 必须指定查询,并将其作为运行。 当前suggestion自动提供为}变量,应在您的查询中使用。 您仍然可以指定自己的模板params-suggestions值将添加到您指定的变量。 此外,您可以指定一个prune以控制是否返回所有短语suggestions,设置为 true时,suggestions将有一个附加选项collate_match,如果找到匹配的短语文档,则为true,否则为false。prune的默认值为false。

模板查询