使用solr搭建搜索服务器

栏目: 后端 · 发布时间: 6年前

内容简介:研究了三天,因为想直接部署成分布式的,网上的各种教程都是太过久远的了,绕来绕去就死在配置文件里了所以先不想做分布式的问题了,先搭一个单机版的,压力上来了再装

使用solr搭建搜索服务器

前言

solr 是一个用 java 写的搜索服务器,支持分布式集群部署等各种特性,现在看来应该是 目前使用范围最广的搜索服务器了

研究了三天,因为想直接部署成分布式的,网上的各种教程都是太过久远的了,绕来绕去就死在配置文件里了

所以先不想做分布式的问题了,先搭一个单机版的,压力上来了再装 zookeeper 做分布式

安装

系统为 CentOS7

  1. 新建一个专门负责搜索服务的用户search,将 下载 的solr二进制包放在这个用户的家目录中,我这里是直接把本地压缩包扔进了服务器中

    // 需要先建立一个专门负责搜索服务的账户: search
    useradd search
         
         
    // 在search家目录下新建服务文件夹
    mkdir /home/search/search-service
         
         
    // 将本地代码上传到服务文件夹下
    scp solr-7.4.0.zip root@testing:/home/search/search-service/
  2. 解压 solr-7.4.0.zip

    // 进入目录
    cd /home/search/search-service/
     
     
     
    // 解压缩
    unzip solr-7.4.0.zip
     
    // 将服务权限赋给search
    chown -R search:search /home/search/search-service/solr-7.4.0/server/
    
  3. 进入solr目录

       cd solr-7.4.0/
    
  4. 新建 /usr/java 目录,在其中下载 jdk

     http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
         
         
     mkdir /usr/java
     // 我是从本地将jdk上传到服务器中
     scp jdk-8u181-linux-x64.tar.gz root@testing:/usr/java/
    
  5. 解压缩jdk包

     cd /usr/java/   
     tar -zxvf jdk-8u181-linux-x64.tar.gz
    
  6. 配置环境变量

      vim /etc/profile
          
          
      // 在最后添加环境变量,其中根据jdk版本修改JAVA_HOME和JRE_HOME
      #set java environment
      JAVA_HOME=/usr/java/jdk1.8.0_181
      JRE_HOME=/usr/java/jdk1.8.0_181/jre
      CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
      PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
      export JAVA_HOME JRE_HOME CLASS_PATH PATH
    
  7. 让修改生效

      source /etc/profile
    
  8. 验证jdk是否安装成功

      java -version
          
      // 如果有如下输出,证明安装成功
      java version "1.8.0_181"
      Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
      Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    
  9. 启动solr节点

     // 切换用户
     su search
         
         
     // 进入solr根目录
     cd /home/search/search-service/solr.7.4.0/
         
         
     // 启动节点
     bin/solr start (可以使用 -p 8983 指定端口,默认是8983端口)
    

创建core

core是搜索的核心,可以把它理解为集合,比如我需要搜索用户和帖子,那么就需要创建两个core: usersarticles

        bin/solr create -c users  // 索引用户
        bin/solr create -c articles  // 索引文章

进入后台进行查看

      // 获得外网ip
      curl ip.gs
       
       
      // 在浏览器中访问后台
      http://ip:8983
       
       
      // 服务搭建完成后要关闭外部端口,从内网中访问
     

API

我第一个用的搜索服务器是 xunsearch ,需要做很多配置,我以为搜素软件都这样…233

但是实际上 solr 不需要这么麻烦,如果仅仅是单机版,简单的搜索配置完全可以使用 http 请求来设置

我们假设 solr 的后台地址为: http://localhost:8983/solr

core 名为 my_collection

  • 添加索引

    • 添加单个

      curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update/json/docs' --data-binary '
         {
           "id": "1",
           "title": "Doc 1"
         }'
    • 添加多个

    curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
        [
          {
            "id": "1",
            "title": "Doc 1"
          },
          {
            "id": "2",
            "title": "Doc 2"
          }
        ]'
    • 要注意,仅仅添加后是无法搜索到文档的,还需要 commit 才可以
  • 更新索引

    curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
      {
        "add": {
          "doc": {
            "id": "DOC1",
            "my_field": 2.3,
            "my_multivalued_field": [ "aaa", "bbb" ]   
          }
        },
        "add": {
          "commitWithin": 5000, 
          "overwrite": false,  
          "doc": {
            "f1": "v1", 
            "f1": "v2"
          }
        },
          
        "commit": {},
        "optimize": { "waitSearcher":false },
          
        "delete": { "id":"ID" },  
        "delete": { "query":"QUERY" } 
      }'

    可以看到,添加、commit删除等操作,都可以通过1次http请求来设置

  • 查询

查询的路径为 http://{$url}/select?q=xxx&sort=xxx&start=xxx&rows=xxx

参数q为查询主体,sort为 排序 方式,rows为查询行数,start为查询起始位置

例如 users 表中有 name 字段,

  • 我们需要查询 namesilsuer 的用户

    那么 参数 q=name:silsuer

  • 并且按照创建时间倒序查询

    参数 q=name:silsuer&sort=created_at desc

  • 每页查出10条数据,并且本次查第二页

    参数start的计算方式为: start=num*(page-1) -> start=10*(2-1)=10

    参数为: q=name:silsuer&sort=created_at desc&start=10&rows=10

  • 注意:上面的参数中的空格冒号之类的,需要url编码后使用

以上就是 solr 的基本用法.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python学习手册

Python学习手册

Mark Lutz / 侯靖 / 机械工业出版社 / 2009-8 / 89.00元

《Python学习手册(第3版)》讲述了:Python可移植、功能强大、易于使用,是编写独立应用程序和脚本应用程序的理想选择。无论你是刚接触编程或者刚接触Python,通过学习《Python学习手册(第3版)》,你可以迅速高效地精通核心Python语言基础。读完《Python学习手册(第3版)》,你会对这门语言有足够的了解,从而可以在你所从事的任何应用领域中使用它。 《Python学习手册(......一起来看看 《Python学习手册》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换