solr的模糊搜索主要有通配符,范围查询,近距离搜索等几类。下面分别探讨一下用法。

1. 通配符查询

通配符只是对单个term有效,对短语不起作用,ps:短语就是在查询条件上加双引号,比如 title:”xxx yyy”。
其实也就跟一般的通配符的匹配方式差不多了,比如我要查询title里有evaluat开头的文档:

title:evaluat*
  • 1

Note that:查询语句里一定要用小写,还没研究清楚大小写的区分,但是用大写的不行

另外通配符有很大的性能开销,尤其在匹配到大量数据时,比如:e*,建议不要这样用。
其他例子:

title:evaluat* cipro
  • 1

title:evaluat?
  • 1


solr in action 例子:

Query: offi* Matches office, officer, official, and so on
Query: off*r Matches offer, officer, officiator, and so on
Query: off?r Matches offer, but not officer Works: softwar* eng?neering
Does not work: "softwar* eng?neering"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 范围查询

范围查询可以支持时间范围,数值范围,字符串范围等
1. 时间范围:
查询2015-06-07T19:11:45Z TO 2015-06-10T19:11:45Z这个范围的文档,这里要注意格式必须是solr的日期格式,也就是2015-06-07T19:11:45Z这样的格式,必须大写TO

received_date:[2015-06-07T19:11:45Z TO 2015-06-10T19:11:45Z]
  • 1

  1. 数值范围
Query: yearsOld:[18 TO 21] Matches 18, 19, 20, 21
  • 1
  1. 文本范围
source:[kyowa TO kyowb]
  • 1

实际匹配kyowa ….kyowb => a->b的范围,也就是只能包含kyowa, kyowb这两个单词

solr in action 例子:

Query: created:[2012-02-01T00:00.0Z TO 2012-08-02T00:00.0Z]
Query: title:[boat TO boulder] Matches boat, boil, book, boulder, etc.
Query: price:[12.99 TO 14.99] Matches 12.99, 13.000009, 14.99, etc
// 这是带边界的例子
Query: yearsOld:{18 TO 21} Matches 19 and 20 but not 18 or 21
Query: yearsOld:[18 TO 21} Matches 18, 19, 20, but not 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3. 近距离搜索(FUZZY/EDIT-DISTANCE SEARCHING/PROXIMITY SEARCHING)

  1. EDIT-DISTANCE SEARCHING
    这主要是为了解决输入错误的问题,比如输入good时错误的输入为goob了怎么办,solr用波浪…….
    线来容错,比如
source:kyowb~1
  • 1

这里本来要输入kyowa,结果输成了kyowb,那么加上~1就能把正确的kyowa查询出来,~N也就是允许有几个编辑位置错误,这里是1个位置错误,如果你输入kyoab~1,就查询不出来了,因为输入错误两个位置,这时就需要~2了,默认情况下是~2.
1个位置错误时:

2个位置错误时:

fixed


solr in action 例子:

Query: administrator~1 Matches within one edit distance.
Query: administrator~2 Matches within two edit distances. (This is the default
if no edit distance is provided.)
Query: administrator~N Matches within N edit distances.
Please
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 邻近搜索(PROXIMITY SEARCHING)
    这个功能主要用来解决短语的模糊搜索问题,比如你要查找chief executive officer,chief financial
    officer,chief marketing officer….等等如chief x
    officer的短语怎么办,用OR连起来显然麻烦,这就是邻近搜索的作用了,只需”chief officer”~1即可,~1表示chief
    officer之间最多只有一个单词,是最多,不是只有一个,也可以是0个,如果有N个单词,即~N,注意,一定要加双引号,这才表示是短语,不然就是一个term了。

solr in action 例子:

Query: "chief officer"~1
– Meaning: chief and officer must be a maximum of one position away.
– Examples: "chief executive officer", "chief financial officer"
Query: "chief officer"~2
– Meaning: chief and officer must be a maximum of two edit distances away.
– Examples: "chief business development officer",
"officer chief"
Query: "chief officer"~N
– Meaning: Finds chief within N positions of officer.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

By David_Ao

solr之模糊搜索(Fuzzy matching)的更多相关文章

  1. solr :term 查询, phrase查询, boolean 查询

    搜索总体有:term 查询, phrase查询, boolean 查询 1. SOLR搜索覆盖度和准确度保证的三个搜索方式: 保证准确率: AND: Search for two different ...

  2. Elasticsearch 常用基本查询

    安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文 ...

  3. [原]CentOS7部署PostGis

    转载请注明原作者(think8848)和出处(http://think8848.cnblogs.com) 本文参考了<An almost idiot's guide to install Pos ...

  4. 10 行 Python 代码写的模糊查询

    导语: 模糊匹配可以算是现代编辑器(在选择要打开的文件时)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列表供用户选择. 样例如下: Vim (Ctrl-P ...

  5. Linux下Awk详解(转载)

    什么是Awk Awk是一种小巧的编程语言及命令行工具.(其名称得自于它的创始人Alfred Aho.Peter Weinberger 和 Brian Kernighan姓氏的首个字母).它非常适合服务 ...

  6. Query DSL for elasticsearch Query

    Query DSL Query DSL (资料来自: http://www.elasticsearch.cn/guide/reference/query-dsl/) http://elasticsea ...

  7. Python的regex模块——更强大的正则表达式引擎

    Python自带了正则表达式引擎(内置的re模块),但是不支持一些高级特性,比如下面这几个: 固化分组    Atomic grouping 占有优先量词    Possessive quantifi ...

  8. Python 代码实现模糊查询

    Python 代码实现模糊查询 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列 ...

  9. PostgreSQL9.1 with PostGIS 2.1.4 for mapping coordinates on linux/ubuntu 已经打包成deb 可下载

    For location based service, I try to use postgresql with postgis. You can download postgis from here ...

随机推荐

  1. Java中线程同步的方法

    同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就处于阻塞状态. 注 ...

  2. Python中的import

    模块(module):用来从逻辑(实现一个功能)上组织Python代码(变量.函数.类),本质就是*.py文件.文件是物理上组织方式"module_name.py",模块是逻辑上组 ...

  3. iOS-----使用NSURLConnection

    使用NSURLConnection 如果只是为了读取HTTP等服务器数据,或向服务器提交数据,iOS还提供了NSURLConnection类,NSURLConnection使用NSURLRequest ...

  4. CentOS LAMP环境 配置详解

    要想在linux上实现网页服务器(www)需要Apache这个服务器软件,不过Apache仅能提供最基本的静态网站数据而已,想要实现动态网站的话,最好还是要PHP与MySQL的支持,所以下面我们将会以 ...

  5. 教你正确进入DFU及恢复模式 无敌重刷模式

    苹果分为两种恢复模式,一种叫做DFU模式,另一种是恢复模式.DFU的全称是Development FirmwareUpgrade,实际意思就是iPhone固件的强制升降级模式.而恢复模式则是屏幕上会显 ...

  6. python 获取中文文件名的输出

    #coding:utf8 if __name__ == '__main__': srcfile = u"D:/测试路径/测试文件.txt" f = open(srcfile.enc ...

  7. cmd下查看当前登陆用户

    cmd下查看当前登陆用户 终端下,自然可以用quser这个命令了.但是在其它如专业版2k下如何查看在线用户呢? C:\Documents and Settings\Administrator>n ...

  8. npm bower gulp

    npm即nodejs package manager ,是nodeJs的包管理工具,使用前需安装nodeJs(https://www.npmjs.com.cn/getting-started/inst ...

  9. C语言面试题3

    编程题 1.读文件file1.txt的内容(例如): 123456 输出到file2.txt: 563412 #include <stdio.h> #include <stdlib. ...

  10. Windows nginx php cgi-fcgi 配置 xdebug

    之前使用的是 Apache + PHP,不用怎么配置就可以. 由于服务器用的是 nginx,为了和服务器一致,所以本地开发也改为 nginx. 开始只是简单的开启 xdebug, 发现并不行. 找了一 ...