Suggester之Phrase Suggester

概念

term suggest提供一个非常方便的API,用于在一定的字符串距离内按每个令牌访问单词替代。API允许单独访问流中的每个令牌,而建议选择则留给API使用者。然而,为了向最终用户提出建议,往往需要预先选定的建议。

创建索引mapping

一旦你设置了分析器和映射,你就可以在同一个地方使用短语建议器

PUT test
{
"mappings": {
    "properties": {
      "title": {
        "type": "text",
        "fields": {
          "trigram": {
            "type": "text",
            "analyzer": "trigram"
          },
          "reverse": {
            "type": "text",
            "analyzer": "reverse"
          }
        }
      }
    }
  }
}

插入数据

POST test/_doc?refresh=true
{"title": "noble warriors"}
POST test/_doc?refresh=true
{"title": "nobel prize"}

一旦你设置了分析器和映射,你就可以在同一个地方使用暗示器这个短语:

建议查询

POST test/_search
{
  "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>"
        }
      }
    }
  }
}

响应结果

响应包含建议,由最有可能的拼写纠正首先评分。在这种情况下,我们得到了预期修正“nobel prize”。

{
  "_shards": ...
  "hits": ...
  "timed_out": false,
  "took": 3,
  "suggest": {
    "simple_phrase" : [
      {
        "text" : "noble prize",
        "offset" : 0,
        "length" : 11,
        "options" : [ {
          "text" : "nobel prize",
          "highlighted": "<em>nobel</em> prize",
          "score" : 0.48614594
        }]
      }
    ]
  }
}

扩展

下面的示例显示了使用两个生成器的短语建议调用:第一个使用了包含普通索引术语的字段,第二个使用了使用反向过滤器索引的术语的字段(令牌是倒序索引的)。这是用来克服直接生成器需要一个常量前缀来提供高性能建议的限制。pre_filter和post_filter选项接受普通的分析器名称。

POST test/_search
{
  "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也可以用于在生成候选对象之后注入同义词。例如,对于查询队长usq,我们可以为术语usq生成一个候选usa,它是america的同义词。如果这句话的得分足够高,我们就可以向用户呈现captain america。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走进IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值