zoukankan      html  css  js  c++  java
  • [Elasticsearch] 部分匹配 (三)

    本章翻译自Elasticsearch官方指南的Partial Matching一章。


    查询期间的即时搜索(Query-time Search-as-you-type)

    如今让我们来看看前缀匹配可以怎样帮助全文搜索。

    用户已经习惯于在完毕输入之前就看到搜索结果了 - 这被称为即时搜索(Instant Search, 或者Search-as-you-type)。这不仅让用户可以在更短的时间内看到搜索结果。也可以引导他们得到真实存在于我们的索引中的结果。

    比方。假设用户输入了johnnie walker bl,我们会在用户输入完毕前显示Johnnie Walker Black Label和Johnnie Walker Blue Label相关的结果。

    和往常一样,有多种方式可以达到我们的目的。首先我们从最简单的方式開始。你不须要以不论什么的方式准备你的数据,就行在不论什么全文字段(Full-text Field)上实现即时搜索。

    短语匹配(Phrase Matching)中。我们介绍了match_phrase查询,它可以依据单词顺序来匹配全部的指定的单词。对于查询期间的即时搜索,我们可以使用该查询的一个特例,即match_phrase_prefix查询:

    {
        "match_phrase_prefix" : {
            "brand" : "johnnie walker bl"
        }
    }

    次查询和match_phrase查询的工作方式基本同样。除了它会将查询字符串中的最后一个单词当做一个前缀。换言之,前面的样例会查找下面内容:

    • johnnie
    • 紧接着的是walker
    • 紧接着的是以bl开头的单词

    假设我们将该查询通过validate-query API运行,它会产生例如以下的解释:

    "johnnie walker bl*"

    和match_phrase查询一样。它可以接受一个slop參数(參见这里)来让单词间的顺序和相对位置不那么严格:

    {
        "match_phrase_prefix" : {
            "brand" : {
                "query": "walker johnnie bl", 
                "slop":  10
            }
        }
    }

    可是,查询字符串中的最后一个单词总是会被当做一个前缀。

    在之前介绍prefix查询的时候,我们谈到了prefix查询的一些须要注意的地方 - prefix查询时怎样消耗资源的。在使用match_phrase_prefix查询的时候,也面临着相同的问题。一个前缀a你可以匹配很许多的词条。匹配这么多的词条不仅会消耗许多资源,同一时候对于用户而言也是没有多少用处的。

    我们能够通过将參数max_expansions设置成一个合理的数值来限制前缀扩展(Prefix Expansion)的影响,比方50:

    {
        "match_phrase_prefix" : {
            "brand" : {
                "query":          "johnnie walker bl",
                "max_expansions": 50
            }
        }
    }

    max_expansions參数会控制可以匹配该前缀的词条的数量。它会找到首个以bl开头的词条然后開始收集(以字母表顺序)直到全部以bl开头的词条都被遍历了或者得到了比max_expansions很多其它的词条。

    不要忘了在用户每敲入一个字符的时候。该查询就要被运行一次。因此它的速度须要快。假设第一个结果集不符合用户的期望,那么他们就会继续输入直到得到他们须要的结果。


  • 相关阅读:
    python 希尔排序
    python 选择排序
    python 插入排序
    怎么根据返回数量,来渲染点赞星星的个数变高量?
    avalon $computed不起作用?
    移动端点击事件兼容问题,在pc端可以点,在手机上不可以点
    移动端弹出遮罩层禁止页面滚动,遮罩里面的框允许滚动如何实现。
    移动端,如何禁止弹窗下面内容滚动/页面滚动
    avalon数据已更新,视图未更新的bug修复
    Python 导入分部分项前的 数据处理
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5247811.html
Copyright © 2011-2022 走看看