很多时候搜索用户对查询语句具有模糊感觉,他们只能提供大约的描述。比如一个语句的部分,或者字句顺序颠倒等。通过模糊查询可以帮助用户更准确的找出他们希望搜索的结果。

模糊查询包括前后缀,语句(phrase)查询。前缀查询在非文本查询和全文查询字段中使用是有着不同的效果:在非文本字段查询中我们需要严格按照词字顺序进行匹配,而全文查询中由于目标字段在构建索引时已经进行了分词处理,所以匹配是在分词中进行匹配的。下面是一些非文本前后缀查询的例子:

POST /bank/_search
{
"query" : {
"prefix" : {
"address.keyword": ""
}
}
}
POST /bank/_search
{
"query" : {
"wildcard": {
"address.keyword": "*Holmes*"
}
}
}
POST /bank/_search
{
"query" : {
"regexp": {
"address.keyword": ".*Holmes.*"
}
}
}

elastic4例子:

  val qPrefix = search("bank").query(prefixQuery("address.keyword",""))
val qWildcard = search("bank").query(wildcardQuery("address.keyword","*Holmes*"))
val qRegex = search("bank").query(regexQuery("address.keyword",".*Holmes.*"))

全文查询中常用match_phrase:这是一种语句查询。如:

GET /books/_search
{
"query": {
"match_phrase": {
"publisher": "人民出版社"
}
}
}

一个有意义的语句中每个字在句子中的位置都是按顺序的。“人民出版社”可能被分词成“人民”、“人民版”,“人民社”、“社“等。但实际上很多图书行内人称“人社版“。也就是说应该容许一定程度的灵活性,即字在句中的位置容许一定程度的错位。这个程度可以用slop来表示:

GET /books/_search
{
"query": {
"match_phrase": {
"publisher": {
"query": "人社版",
"slop" :
}
}
}
}

上面这个slop = 10 的意思是我们可以容许十步字距调整。slop值越大覆盖词段越广,不过可能会影响效率。elastic4请求表达如下:

  val qPhrase = search("books").query(
matchPhraseQuery("PUBLISHER","人社版").slop()
)

另外,match_phrase在用户录入查询条件时可以作为提示(auto-completion)或者即录即查(search_as_you_type)使用。这时用前缀查询match_phrase_prefix最为合适。因为可以兼顾英文到字母层级的录入查询:

GET /books/_search
{
"query": {
"match_phrase_prefix": {
"publisher": {
"query": "人社版",
"slop" :
}
}
}
}

用elastic4来表示:

  val qPhrasePfx = search("books").query(
matchPhrasePrefixQuery("PUBLISHER","人社版").slop()
)

search(11)- elastic4s-模糊查询的更多相关文章

  1. monggodb 模糊查询

    MongoDB的模糊查询其实很简单:      11.LIKE模糊查询userName包含A字母的数据(%A%)       SQL:SELECT * FROM UserInfo WHERE user ...

  2. 10 star组件之分页, search模糊查询, action批量处理

    1.分页组件高阶 1.分页的class形式(有bug,请看下面的) """ 自定义分页组件 """ class Pagination(obj ...

  3. 可以执行全文搜索的原因 Elasticsearch full-text search Kibana RESTful API with JSON over HTTP elasticsearch_action es 模糊查询

    https://www.elastic.co/guide/en/elasticsearch/guide/current/getting-started.html Elasticsearch is a ...

  4. mysql模糊查询1,11,111用逗号(其他符号)拼接的相似字符串

    mysql进行模糊查询时,基本都是LIKE "%sss%",有时候这种查询时准确的,但是有种情况这种查询会出现很大问题. 看一下下面这张表 如果想查询字段test包含1的数据,一般 ...

  5. jquery 模糊查询下拉框

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD&g ...

  6. java中实现对list的模糊查询

    比如我有下面这样一个List,里面存放的是多个Employee对象.然后我想对这个List进行按照Employee对象的名字进行模糊查询.有什么好的解决方案么?比如我输入的查询条件为“wang”,那么 ...

  7. stark组件的分页,模糊查询,批量删除

    1.分页组件高阶 2.整合展示数据showlist类 3.stark组件之分页 3.stark组件之search模糊查询 4.action批量处理数据 4.总结 1.分页组件高阶 1.分页的class ...

  8. easyUI combobox combotree 模糊查询,带上下键选择功能,待完善。。。。

    /2017年4月9日 11:52:36 /** * combobox和combotree模糊查询 * combotree 结果带两级父节点(手动设置数量) * 键盘上下键选择叶子节点 * 键盘回车键设 ...

  9. Django模糊查询

    https://blog.csdn.net/liuweiyuxiang/article/details/71104613 def search(request): searchtype = reque ...

  10. django ORM 增删改查 模糊查询 字段类型 及参数等

    ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...

随机推荐

  1. 通过神秘代码登录自己的QQ

    通过神秘代码登录自己的QQ 如图:是怎么做成的呢? 其实很明显,这个是QQ号码的16进制 所以网上搜索进制转换打开一个网页 输入自己的QQ号码,得到16进制的QQ号码 在QQ页面账号处先添加0x然后复 ...

  2. Python 分析后告诉你闲鱼上哪些商品抢手?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...

  3. 哈密顿绕行世界问题 HDU2181

    题目大意都比较简单,用vector存一下图,然后爆搜就可以了. #include<bits/stdc++.h> using namespace std; ; vector<]; bo ...

  4. C. Primes and Multiplication

    题目连接:https://codeforces.com/contest/1228/problem/C 题目大意:g(x,y)==y^k(其中y^k是X的最大可以整除因子) f(x,y)==g(x,p1 ...

  5. Jmeter--Mysql数据库压力测试

    前提环境要求:首先下载合适的数据库驱动 传送门:https://mvnrepository.com/artifact/mysql/mysql-connector-java 将下载好的驱动放到Jmete ...

  6. Mybatis源码详解系列(四)--你不知道的Mybatis用法和细节

    简介 这是 Mybatis 系列博客的第四篇,我本来打算详细讲解 mybatis 的配置.映射器.动态 sql 等,但Mybatis官方中文文档对这部分内容的介绍已经足够详细了,有需要的可以直接参考. ...

  7. python学习笔记(五)---函数与类

    函数 def为定义函数的一个标志 demo1: def greet_user(username): print("Hello, " + username.title() + &qu ...

  8. QT QLabel内容太长时候使用省略号

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xiezhongyuan07/articl ...

  9. HTTP 1.1, 返回值100.

    HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401.客户端如果接受到100,才开始把请求body发送到服务器. 这样 ...

  10. Redis持久化存储(二)

    redis多实例介绍 接上一篇redis.创建数据存放的目录 vim redis.conf +187 dir /application/data/ 重新启动 mkdir /application/da ...