2019独角兽企业重金招聘Python工程师标准>>>

search是sphinx中的一个辅助工具,searchd负责服务器类环境中的搜索,而search专注于在命令行上对索引进行快速测试,而不需要构建一个复杂的架构来除了到服务器端的连接和处理服务期返回的响应。

注意:serch并不是设计用来作为客户端应用程序的一部分,强烈建议用户不要针对search编写借口,相反,应该针对searchd。sphinx提供的任何客户端API也都不支持这种用法。(任何时候search总是每次都重新调入索引,而search会把索引缓冲在内存中以利性能)。

很多新的特性先在searchd系统中实现了而尚未引入到search中。

search 的调用语法如下:

search [OPTIONS] word1 [word2 [word3 [...]]]

调用search并不要求searchd正在运行,只需运行search的账户对配置文件和索引文件以及所在路径有读取权限即可。

默认行为是对在配置文件中设置的全部索引的全部字段搜索word1(AND word2 AND word3….)。如果用API调用来构建这个搜索,那相当于向SetMatchMode传递参数SPH_MATCH_ALL,然后在调用Query的时候指定要查询的索引是*。

search有很多选项。首先是通用的选项。

  • --config <file> (可简写为-c <file>) 使search使用指定的配置文件,这与上述indexer的对应选项相同。
  • --index <index> (可简写为-i <index>) 使search仅搜索指定的索引。通常它会尝试搜索sphinx.conf中列出的全部物理索引,不包括分布式索引。
  • --stdin使search接受标准输入(STDIN)上传入的查询,而不是命令行上给出的查询。有时你要用脚本通过管道给search传入查询,这正是这个选项的用武之地。

设置匹配方式的选项:

  • --any (可简写为-a) 更改匹配模式,匹配指定的任意一个词(word1 OR word2 OR word3),这对应API调用中向SetMatchMode传递参数SPH_MATCH_ANY。
  • --phrase (可简写为-p) 更改匹配模式,将指定的全部词做为一个词组(不包括标点符号)构成查询,这对应API调用中向SetMatchMode传递参数SPH_MATCH_PHRASE。
  • --boolean (可简写为-b) 将匹配模式设为 Boolean matching。注意如果在命令行上使用布尔语法,可能需要对某些符号(用反斜线“\”)加以转义,以避免外壳程序(shell)或命令行处理器对这些符号做特殊理解,例如,在Unix/Linux系统上必须转义“&”以防止search被fork成一个后台进程,尽管这个问题也可以像下文一样通过使用--stdin选项来解决。这个选项对应API调用中向SetMatchMode传递参数SPH_MATCH_BOOLEAN。
  • --ext (可简写为-e) 将匹配模式设为Extended matching。这对应与API调用中向SetMatchMode传递参数SPH_MATCH_EXTENDED。要注意的是因为已经有了更好的扩展匹配模式版本2,所以并不鼓励使用这个选项,见下一条说明。
  • --ext2 (可简写为-e2) 将匹配模式设为 扩展比配, 版本 2。这个选项对应在API调用中向SetMatchMode传递参数SPH_MATCH_EXTENDED2。要注意这个选项相比老的扩展匹配模式更有效也提供更多的特性,因此推荐使用这个新版的选项。
  • --filter <attr> <v> (可简写为-f <attr> <v>) 对结果进行过滤,只有指定的属性attr匹配指定的值v时才能通过过滤。例如--filter deleted 0 只匹配那些有deleted属性,并且其值是0的文档。也可以在命令行上多次给出--filter以便指定多重过滤,但是如果重复定义针对同一个属性的过滤器,那么第二次指定的过滤条件会覆盖第一次的。

用于处理搜索结果的选项:

  • --limit <count> (可简写为-l count) 限制返回的最多匹配结果数。如果指定了分组(group)选项,则表示的是返回的最多匹配组数。默认值是20个结果(与API相同)
  • --offset <count> (可简写为-o <count>) 从第count个结果开始返回,用于给搜索结果分页。如果想要每页20个结果,那么第二页就从偏移量20开始,第三页从偏移量40开始,以此类推。
  • --group <attr> (可简写为-g <attr>) 搜索结果按照指定的属性attr进行分组。类似SQL中的GROUP BY子句,这会将attr属性值一致的结果结合在一起,返回的结果集中的每条都是一组中最好的那条结果。如果没有特别指定,那“最好”指的是相关度最大的。
  • --groupsort <expr> (可简写为-gs <expr>) 使搜索结果根据-group分组后,再用表达式<expr>的值决定分组的顺序。注意,这个选项指定的不是各组内部哪条结果是最好的,而是分组本身返回的顺序。
  • --sortby <clause> (可简写为-s <clause>) 指定结果按照<clause>中指定的顺序排序。这使用户可以控制搜索结果展现时的顺序,即根据不同的列排序。例如,--sortby "@weight DESC entrytime DESC" 的意思是将结果首先按权值(相关度)排序,如果有两条或以上结果的相关度相同,则他们的顺序由时间值entrytime决定,时间最近(值最大)的排在前面。通常需要将这些项目放在引号里(--sortby "@weight DESC")或者用逗号隔开(--sortby @weight,DESC),以避免它们被分开处理。另外,与通常的排序模式相同,如果指定了--group(分组),这个选项就影响分组内部的结果如何排序。
  • --sortexpr expr (可简写为-S expr) 搜索结果展现的顺序由指定的算术表达式expr决定。例如: --sortexpr "@weight + ( user_karma + ln(pageviews) )*0.1"(再次提示,要用引号来避免shell对星号*做特殊处理)。扩展排序模式在排序模式 一章下的SPH_SORT_EXTENDED条目下具体讨论。
  • --sort=date 搜索结果按日期降序(日期最新的在前)排列。要求索引中有一个属性被指定为时间戳。
  • --rsort=date 特别指定结果升序排列(日期中较老的在前)。要求索引中有一个属性被指定为时间戳。
  • --sort=ts 搜索结果按时间戳分成组。先返回时间戳在最近一小时内的这组结果,在组内部按相关度排序。其后返回时间戳为最近一天之内的结果,也按相关度排序。再之后是最近一周的,最后是最近一个月的。在排序模式 一章的SPH_SORT_TIME_SEGMENTS 条目下对此有更详细的讨论。

其他选项:

  • --noinfo (可简写为-q) 使search不在SQL数据库中查询文档信息(Document Info)。具体地说,为了调试search和MySQL共同使用时出现的问题,你可以在使用这个选项的同时提供一个根据文档ID搜索整个文章全文的查询。细节可参考sql_query_info指令。

转载于:https://my.oschina.net/u/919580/blog/113177

seach和seachd的区别相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  3. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  4. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  5. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  8. python中__dict__与dir()区别

    前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...

  9. java和C#面向对象的区别

    问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...

最新文章

  1. python三十八:re模块
  2. Mybatis框架的操作步骤和细节处理
  3. mysql分布式安装可靠读写案列图解,高并发下的分布式锁-mysql篇
  4. linux读写文件实例,Linux在应用层读写寄存器的方法及实现实例
  5. 按钮 每一行_word跨页表格如何重复设置表头?单击“重复标题行”按钮来设置多页表格重复标题行显示。...
  6. java ioexception异常_12. Java IO: 异常处理
  7. ASCII码表 0~127
  8. php字符串去重和去空,php去空格
  9. Word转换成PDF文档怎么转换
  10. Jetson Nano 入坑之路 ----(9)C++调用SYN6288语音播报模块
  11. 工程师视角的手游SDK
  12. Java多线程---Phaser
  13. 数据结构(三)—— 树(1):树与树的表示
  14. django发送ajax请求 获取 b站视频封面图片
  15. 将您重定向的次数过多什么意思_【linux二三轶事】重定向是啥?文件描述符是啥?...
  16. Linux7.3安装yum工具,Red Hat Enterprise Linux 7.3更换CentOS 7 yum源
  17. linux运行软件代码,Linux软件安装-详细源码安装过程
  18. OSI模型及数据封装过程
  19. 【Python自动化测试16】测试用例数据分离
  20. 用易我分区表医生恢复被破坏的分区表

热门文章

  1. GAE 博客——B3log Solo 0.3.5 正式版发布了!
  2. Spring AOP 本质(3)
  3. Javascript实现浏览器菜单命令
  4. 关于linux命令的书,关于LINUX命令行(一)
  5. 解决webserver tcp连接大量CLOSE_WAIT 问题
  6. Netty 总结与面试答疑
  7. Spring 事务core 模块-RowMapper
  8. TCC两阶段补偿方案
  9. Spring Cloud生态的构建
  10. MyBatis常用配置解析-environments标签