精华内容
下载资源
问答
  • web请求solr
    2021-02-28 09:05:25

    一、通过Java访问Solr服务(手动创建索引库)

    1、创建项目,配置环境(导包及相关文件)

    1、SolrJ核心包 /solr-4.10.3/dist/solr-solrj-4.10.3.jar

    2、SolrJ依赖包 /solr-4.10.3/dist/solrj-lib下的所有包

    3、日志依赖包 /solr-4.10.3/example/lib/ext目录下的所有jar包

    4、JDBC驱动包 mysql-connector-java-5.1.10-bin.jar

    5、拷贝log4j.properties到src目录下。(或者创建一个Source Folder)

    项目结构如下所示

    2、编写代码

    【1】采集数据

    1】创建pojo,创建Product类

    package cn.jinshan.pojo;

    public class Product {

    private Integer pid;

    private String name;

    private String catalogName;

    private double price;

    private String description;

    private String picture;

    // 补全get、set方法}

    【2】创建连接数据的 ProductDao类

    package cn.jinshan.dao;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.PreparedStatement;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.util.ArrayList;

    import java.util.List;

    import cn.jinshan.pojo.Product;

    public class ProductDao {

    public List getAllProducts() {

    List products = new ArrayList<>();

    //连接数据库 Connection connection = null;

    PreparedStatement prepareStatement=null;

    ResultSet resultSet = null;

    try {

    //加载驱动 Class.forName("com.mysql.jdbc.Driver");

    //获取连接 connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/solr", "root", "gzsxt");

    //获取预处理编译对象 prepareStatement = connection.prepareStatement("select pid,name,price,description,catalog_name,picture from products");

    //执行 resultSet = prepareStatement.executeQuery();

    Product product = null;

    while (resultSet.next()) {

    product = new Product();

    product.setPid(resultSet.getInt("pid"));

    product.setName(resultSet.getString("name"));

    product.setPrice(resultSet.getDouble("price"));

    product.setDescription(resultSet.getString("description"));

    product.setCatalogName(resultSet.getString("catalog_name"));

    product.setPicture(resultSet.getString("picture"));

    products.add(product);

    }

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (SQLException e) {

    e.printStackTrace();

    }finally {

    if (resultSet !=null) {

    try {

    resultSet.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    if (prepareStatement != null) {

    try {

    prepareStatement.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    if (connection !=null) {

    try {

    connection.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    }

    return products;

    }

    }

    【3】创建一个测试类,测试能否取出数据

    package cn.jinshan.test;

    import org.junit.Test;

    import cn.jinshan.dao.ProductDao;

    public class ProductDaoTest {

    @Test

    public void getAll() {

    ProductDao dao = new ProductDao();

    System.out.println(dao.getAllProducts());

    }

    }

    注:运行测试类,控制台可以打印出数据,则证明数据采集正常

    【2】将数据转换成Solr文档SolrInputDocument

    1】将文档的域配置在Solr实例的schema.xml配置文件中,如下图所示:

    2】通过代码将数据转为SolrInputDocument文档

    //将采集的数据转为SolrInputDocument文档 public List getSolrDocument(List products) {

    List solrInputDocuments = new ArrayList<>();

    SolrInputDocument solrInputDocument = null;

    for (Product product : products) {

    solrInputDocument = new SolrInputDocument();

    //此处addField的域,必须跟实例的schema.xml配置文件中配置的域相同 solrInputDocument.addField("id", product.getPid());

    solrInputDocument.addField("product_name", product.getName());

    solrInputDocument.addField("product_catalog_name", product.getCatalogName());

    solrInputDocument.addField("product_price", product.getPrice());

    solrInputDocument.addField("product_description", product.getDescription());

    solrInputDocument.addField("product_picture", product.getPicture());

    solrInputDocuments.add(solrInputDocument);

    }

    return solrInputDocuments;

    }

    3】手动创建索引库(执行方法后,课查看实例中是否生成数据(位置:D:\java\solr\solrHome\collection1\data\index))

    //手动创建索引库 @Test

    public void createIndex() {

    ProductDao productDao = new ProductDao();

    //将数据加入到Solr的索引库 //第一步:连接Solr HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8888/solr/solr1");

    try {

    solrServer.add(productDao.getSolrDocument(productDao.getAllProducts()));

    solrServer.commit();

    } catch (SolrServerException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    三、Solr服务插件及其他配置(通过配置文件系统自动创建索引)

    可以在管理界面直接从数据库导入数据到索引库,不需要通过手动创建索引的全部操作

    1、安装DataImport插件

    【1】配置依赖包

    将/solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar拷贝到/depJar/contrib/dataimporthandler/lib目录下

    将jdbc驱动包拷贝到 /depJar/contrib/db/lib 目录下

    【2】 加载依赖包的相关配置

    在相关实例的solrconfig.xml文件中,加载这两个jar依赖,如下所示:

    2、配置 数据库表和solr域的映射关系

    【1】创建配置文件

    在solr实例的conf目录下,配置数据库映射文件data-config.xml(建议不要修改配置文件名字),文件内容如下:

    为数据库连接的相关配置

    ...数据库表和solr域的关联相关配置(column为表的字段,name为solr域的名称)

    driver="com.mysql.jdbc.Driver"

    url="jdbc:mysql://localhost:3306/solr"

    user="root"

    password="gzsxt"/>

    配置完成,重启solr服务;

    访问solr服务控制台如下,则插件安装完成

    2、配置中文分析器 ( IKAnalyzer)

    【1】 把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib目录下

    【2】 拷贝IkAnalyzer的配置文件IKAnalyzer.cfg.xml到solr/WEB-INF/classes目录下

    IK Analyzer 扩展配置

    stopword.dic;

    【3】 在schema.xml中自定义一个FieldType,指定中文分词器IKAnalyzer

    注:指定中文分词器后,solr域中的个别域的类型就不能写text_general就需要改成text_ik

    更多相关内容
  • solr

    2021-01-06 22:11:59
    Solr是一个独立的企业级搜索应用服务器,它对外提供Web-service的ApI接口接口,用户可以通过http请求,想搜索引擎提交一定格式的XML文件,生成索引,也可以通过Http Get操作提出查找请求,得到Xml格式的返回结果. ...
  • 此存储库提供了使用 Nginx 创建功能性反向代理的基本概述,该代理允许特定 Solr 请求处理程序的白名单并禁止特定查询参数(qt、stream.* 等)。 为什么要反向代理? 为什么不只是在示例中使用 Jetty 配置? 或者...
  • java web 怎么用solr

    2021-02-12 21:49:13
    展开全部我们下载的Solr包后,进入Solr所在的目录,e69da5e6ba9062616964757a686964616f31333337383838我们可以看到以下几个目录:build、client、dist、example、lib、site、src。下面分别对其进行介绍。1) build:...

    展开全部

    我们下载的Solr包后,进入Solr所在的目录,e69da5e6ba9062616964757a686964616f31333337383838我们可以看到以下几个目录:build、client、dist、example、lib、site、src。下面分别对其进行介绍。

    1) build:该目录是在ant build过程中生成的,其中包含了未被打包成jar或是war的class文件以及一些文档文件。

    2) client:该目录包含了特定语言的Solr客户端API,使得使用其他语言的用户能通过HTTP用XML与Solr进行通话。现在该目录里面虽然包含javascript、python、ruby三个子目录,但是到目前为止只包含一部分的ruby的代码,其他语言仍是空的。另外,Solr的Java客户端称为SolrJ,其代码位于src/solrj目录下面。在之后的文章中我会详细介绍Solr客户端的使用。

    3) dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。还记得上一篇文章中,我们在build 1.4版本的Solr源代码后需要部署example吗?其实就是将该目录下面的apache-solr-1.4.war部署到Jetty上面去,并重命名为solr.war。

    4) example:这个目录实际上是Jetty的安装目录。其中包含了一些样例数据和一些Solr的配置。

    其中一些子目录也比较重要,这里也对它们稍作介绍。

    l example/etc:该目录包含了Jetty的配置,在这里我们可以将Jetty的默认端口从8983改为80端口。

    l 将其中的8983端口换成80端口。注意更改端口后启动Jetty可能会提示你没有权限,你需要使用sudo java -jar start.jar来运行。

    l example/multicore:该目录包含了在Solr的multicore中设置的多个home目录。在之后的文章中我会对其进行介绍。

    l example/solr:该目录是一个包含了默认配置信息的Solr的home目录。

    详见下面的“solr home说明”

    l example/webapps:Jetty的webapps目录,该目录通常用来放置Java的Web应用程序。在Solr中,前面提到的solr.war文件就部署在这里。

    5) lib:该目录包含了所有Solr的API所依赖的库文件。其中包括Lucene,Apache commons utilities和用来处理XML的Stax库。

    6) site:该目录仅仅包含了Solr的官网的网页内容,以及一些教程的PDF文档。

    7) src:该目录包含了Solr项目的整个源代码。这里对其各个子目录也做相应的介绍。

    l src/java:该目录存放的是Solr使用Java编写的源代码。

    l src/scripts:该目录存放的是配置Solr服务器的Unix BashShell脚本,在后面介绍多服务器配置中将会有重要的作用。

    l src/solrj:前面提到过该目录存放的是Solr的Java版本的客户端代码。

    l src/test:该目录存放的是测试程序的源代码和测试文件。

    l src/webapp:该目录存放的是管理Solr的Web页面,包括Servlet和JSP文件,其构成了前面提到的WAR文件。管理Solr的JSP页面在web/admin目录下面,如果你有兴趣折腾Solr可以找到相应的JSP的页面对其进行设置

    1.4.2 Solr home说明

    所谓的Solr home目录实际上是一个运行的Solr实例所对应的配置和数据(Lucene索引)。在上一篇文章中我提到过在Solr的example/solr目录就是一个Solr用做示例的默认配置home目录。实际上example/multicore也是一个合法的Solr home目录,只不过是用来做mult-core设置的。那么我们来看看example/solr这个目录里面都有些什么。

    example/solr目录下主要有以下一些目录和文件:

    1) bin:如果你需要对Solr进行更高级的配置,该目录建议用来存放Solr的复制脚本。

    2) conf :该目录下面包含了各种配置文件,下面列出了两个最为重要的配置文件。其余的.txt和.xml文件被这两个文件所引用,如用来对文本进行特殊的处理。

    l conf/schema.xml:该文件是索引的schema,包含了域类型的定义以及相关联的analyzer链。

    l conf/solrconfig.xml:该文件是Solr的主配置文件。

    l conf/xslt:该目录包含了各种XSLT文件,能将Solr的查询响应转换成不同的格式,如:Atom/RSS等。

    3) data:包含了Lucene的二进制索引文件。

    4) lib:该目录是可选的。用来放置附加的Java JAR文件,Solr在启动时会自动加载该目录下的JAR文件。这就使得用户可以对Solr的发布版本(solr.war)进行扩展。如果你的扩展并不对Solr本身进行修改,那么就可以将你的修改部署到JAR文件中放到这里。

    Solr是如何找到运行所需要的home目录的呢?

    Solr首先检查名为solr.solr.home的Java系统属性,有几种不同的方式来设置该Java系统属性。一种不管你使用什么样的Java应用服务器或Servlet引擎都通用的方法是在调用Java的命令行中进行设置。所以,你可以在启动Jetty的时候显式地指定Solr的home目录java -Dsolr.solr.home=solr/ -jar start.jar。另一种通用的方法是使用JNDI,将home目录绑定到java:comp/env/solr/home。并向src/webapp/web/WEB-INF/web.xml添加以下一段代码:

    1

    2 solr/home

    3 solr/

    4 java.lang.String

    5

    实际上这段XML在web.xml文件中已经存在,你只需要把原来注释掉的xml取消注释,添加你所要指向的home目录即可。因为修改了web.xml文件,所以你需要运行antdist-war来重新打包之后再部署WAR文件。

    最后,如果Solr的home目录既没有通过Java系统属性指定也没有通过JNDI指定,那么他将默认指向solr/。

    在产品环境中,我们必须设置Solr的home目录而不是让其默认指向solr/。而且应该使用绝对路径,而不是相对路径,因为你有可能从不同的目录下面启动应用服务器。

    注:Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

    我们先从使用者的角度出发,最先看到的当然是servlet,因为Solr本身是个独立的网络应用程序,需要在Servlet容器中运行来提供服务,所以servlet是用户接触的最外层。我们看看org.apache.solr.servlet包。这个包很简单,只有两个类:SolrServlet和SolrUpdateServlet.我们很容易从类名中猜出这两个类的用途。

    SolrServlet类继承HttpServlet类,只有四个方法:

    · init()

    · destroy()

    · doGet()

    · doPost()

    SolrServlet类中除了普通的Java类对象(包括Servlet相关的)外,有四个Solr本身的类,还有一个Solr本身的异常。其中两个类和一个异常属于org.apache.solr.core包,两个类属于org.apache.solr.request包。属于core包的有:

    · Config:

    · SolrCore:

    属于request包的有:

    · SolrQueryResponse:

    · QueryResponseWriter:

    分析一下这个SolrServlet类。首先servlet会调用init()方法进行初始化:通过Context查找java:comp/env/solr/home来确定Solr的主目录(home),接着调用Config.setInstanceDir(home)方法设置这个实例的目录。然后通过SolrCore.getSolrCore()来获得一个SolrCore实例。destroy()方法将会在Servlet对象销毁时调用,仅仅调用core.close()关闭SolrCore实例。

    当用户请求进来时doPost()简单地将任务交给doGet()完成,主要的任务由doGet()完成。分析一下doGet()方法:

    1) 使用SolrCore和doGet()参数request生成一个SolrServletRequest对象(注意:这个SolrServletRequest类不是公开类,位于org.apache.solr.servlet包中,继承了SolrQueryRequestBase类,仅仅接受SolrCore和HttpServletRequest对象作为参数)

    2) 然后SolrCore执行execute()方法(参数为SolrServletRequest和SolrQueryResponse)

    由此可见,真正的处理核心是SolrCore的execute方法

    本回答被提问者和网友采纳

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • solr全文检索实现原理

    2021-02-24 12:06:59
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过HttpGet操作提出查找请求,并得到XML/Json格式...
  • solr-8.2.0.zip

    2019-12-24 14:33:39
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • solr使用教程

    2022-05-09 00:21:59
    solr教程

    Solr基础信息

    • 简介
      • 基于Apache Lucene(全文检索工具库)构建的用于搜索和分析的开源解决方案。可提供可扩展索引、搜索功能、高亮显示和文字解析功能。
      • 本质是java Web项目,内嵌Jetty服务器,所以安装起来非常方便。客户端操作solr的过程和平时我们所写的项目一样,就是请求Solr中的控制器,处理完数据后把结果响应给客户端
    • 正向索引和反向索引
      • 正向索引,从文档到词组的过程。每次搜索的时候需要搜索所有文档,每个文档比较搜索条件和词组
    • 单机版本安装(官网比较详细:https://solr.apache.org/)
    • 启动:
      • 如果是root用户启动:需要修改solr_in.sh SOLR_ULIMIT_CHECKS=false
      • ./solr start (root用户)-force
    • collection、core、replica、core
      • 由多个cores组成一个逻辑索引叫做一个collection。一个collection本质上是一个可以跨越多个核的索引,同时包含冗余索引。
      • collection由不同的shard组成,每个shard又多个replica,每个shard中有一个leadereplica,每个replica是一个物理索引,所以一个replica对应一个core
      • 在单节点的solr上,一个core等于一个collection。
      • 在solrCloud上,一个collection由分布在不同节点的core组成,但是一个collection仍然为一个逻辑索引,但是这个colletion由不同的core包含不同的shards组成。
      • 一个core包含不同封装一个物理索引形成一个实例。
      • 一个collection是由分布在不同node上的core组合而成,从而提供一个逻辑索引组成的。
      • 一个core主要是一个文档集中text和field的索引。一个solr实例可以包含多个core,每个core根据本地一定的标准互相分开。它去提供结不同的搜索接口给用户,或者提供权限让不同用户有不同权限去访问不同文档。
      • collection由一个或者多个shard组成,一个shard包含一个或者多个replica ,一个replica是一个core

    单机版安装

    字段描述

    • fieldType
      • 定义一个属性类型,在solr中属性类型都是自定义的。
    • field
      • 表示向Document中添加一个属性
      • 常用的属性:name 属性名 type 类型
    • uniqueKey
      • 唯一主键,Solr中默认定义id属性为唯一主键。ID的值是不允许重复的
    • dynamicField
      • 名称中允许*进行通配。代表满足特定名称要求的一组属性

    新增数据

    在core中的documents中选择update xml

    输入:

    <doc>
    <field name ="id">1</field>
    <field name ="zh_all">中华人名共和国国歌</field>
    <field name ="zh_smart">中华人名共和国国歌</field>
    </doc>
    

    数据导入

    需要修改的文件 managed-schema solrconfig.xml

    managed-schema

      <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
        <lst name="defaults">
          <str name="config">dataimport.xml</str>
        </lst>
      </requestHandler>
    
    

    solrconfig.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <dataConfig>
    	<dataSource type="JdbcDataSource"
                    driver="com.mysql.cj.jdbc.Driver"
                    url="jdbc:mysql://xxxxxxx:3306/xdclass_product?useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=true&amp;serverTimezone=GMT%2B8"
                    user="root"
                    password="xxxxxx">
        </dataSource>
        <document>
        	<entity name="abc" query="select id,title from product">
                <field column="id" name="id"></field>
                <field column="title" name="zh_all"></field>
            </entity>
        </document>
    </dataConfig>
    

    cp /usr/local/solr/dist/solr-dataimporthandler-* /usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib/

    基本安装步骤

    #减少启动时的警告信息
    cd /usr/local/solr/bin
    vi solr.in.sh
    SOLR_ULIMIT_CHECKS=false
    #启动
    ./solr start -force
    端口8983
    #控制台
    http://ip:8983
    #创建core
    cd /usr/local/solr/server/solr
    cp configsets/_default/conf/ xxxxx/ -r
    #在控制台新增core xxxx
    #安装中文的分析器
    #以下为maven仓库位置,自行去下载
    <dependency>
        <groupId>com.github.magese</groupId>
        <artifactId>ik-analyzer</artifactId>
        <version>8.2.0</version>
    </dependency>
    将该jar包放置/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib
    然后到需要安装中文分析器的core目录下修改managed-schema文件
    在根标记<schema>的第一层开始写
        <field name="zh_all" type="text_zh_all" indexed="true" stored="true" />
        <field name="zh_smart" type="text_zh_smart" indexed="true" stored="true" />
        <fieldType name="text_zh_all" class="solr.TextField">
            <analyzer type="index">
                <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
            <analyzer type="query">
                <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
        </fieldType>
    
        <fieldType name="text_zh_smart" class="solr.TextField">
            <analyzer type="index">
                <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
            <analyzer type="query">
                <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
        </fieldType>
    #停止solr
    /usr/local/solr/bin/solr stop -all
    
    

    使用SolrJ操作Solr

    依赖:

            <dependency>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-solrj</artifactId>
                <version>8.2.0</version>
            </dependency>
    

    基本操作:

    package com.example.solrdemo.solrj;
    
    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.impl.HttpSolrClient;
    import org.apache.solr.client.solrj.request.UpdateRequest;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.client.solrj.response.UpdateResponse;
    import org.apache.solr.common.SolrDocument;
    import org.apache.solr.common.SolrDocumentList;
    import org.apache.solr.common.SolrInputDocument;
    import org.apache.solr.common.util.NamedList;
    
    import java.io.IOException;
    import java.util.Iterator;
    
    public class Test {
        public static void main(String[] args) {
            query();
        }
    
        public static void query(){
            HttpSolrClient client = new HttpSolrClient.Builder("http://xxxxxx:8983/solr/xxxx").build();
            SolrQuery solrQuery = new SolrQuery();
            solrQuery.setSort("id",SolrQuery.ORDER.desc);
            solrQuery.setQuery("zh_all:技术");
            QueryResponse response;
            try {
                response = client.query(solrQuery);
                System.out.println(response.getResults());
                //响应头
                NamedList<Object> namedList = response.getHeader();
                Iterator iterator = namedList.iterator();
                while(iterator.hasNext()){
                    System.out.println(iterator.next());
                }
                SolrDocumentList documentList = response.getResults();
                System.out.println("总计数据行数"+documentList.getNumFound());
                for(SolrDocument solrDocument:documentList){
                    
                    System.out.print("id = "+solrDocument.get("id"));
                    System.out.println("; zh_all = "+solrDocument.get("zh_all"));
                }
                //
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        public static void delete(){
            HttpSolrClient client = new HttpSolrClient.Builder("http://xxxxxxx:8983/solr/xxxx").build();
            try {
                client.deleteById("007");
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
                try {
                    client.rollback();
                } catch (SolrServerException ex) {
                    ex.printStackTrace();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
    
            }
            try {
                client.commit();
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //包括新增和更新。 主键一致-更新。主键不存在-新增
        public static void update(){
            HttpSolrClient client = new HttpSolrClient.Builder("http://xxxxx:8983/solr/xxxx").build();
            //新增或更新。新增文档类型都是SolrInputDocument
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id","007");
            doc.addField("zh_all","测试SolrJ新增数据");
            try {
                UpdateResponse response = client.add(doc);
                System.out.println(String.format("status = %s ; QTime = %s",response.getStatus(),response.getQTime()));
            } catch (Exception e) {
                e.printStackTrace();
                try {
                    client.rollback();
                } catch (SolrServerException ex) {
                    ex.printStackTrace();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                return ;
            }
            //在Solr服务中,数据的写操作也是有事务的,WEB管理平台默认一次操作一次提交。
            try {
                client.commit();
                client.close();
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    使用Spring data Solr

    依赖:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-solr</artifactId>
                <version>2.3.2.RELEASE</version>
            </dependency>
    

    application.properties

    #spring data框架定义的访问地址,不能提供索引库定义。
    #spring data是直接连接数据源的,可以根据索引库命名访问任意索引库,实现数据访问。
    #如果solr是一个集群,则提供zk访问地址。Solr集群称solr cloud,是通过zk搭建的。
    spring.data.solr.host=http://xxxx:8983/solr
    #spring.data.solr.zk-host=xxx
    

    测试:

        @Autowired
        private SolrTemplate solrTemplate;
    
        @Test
        public void testQuery(){
            Criteria criteria = Criteria.where("zh_all").is("技术");
            Query query = Query.query(criteria);
            ScoredPage<FirstSolrPojo> solrPojos = solrTemplate.queryForPage("bjsxt",query,FirstSolrPojo.class);
            System.out.println(solrPojos.getContent());
        }
    
        @Test
        public void testUpdate(){
    
    //        solrTemplate.saveDocument(String collectionName,SolrInputDocument doc);
    //        solrTemplate.saveDocuments(String collectionName,List<SolrInputDocument> docs);
    //        solrTemplate.saveBean(String collectionName,Object bean);
    //        solrTemplate.saveBeans(String collectionName,List<Object> beans);
            FirstSolrPojo pojo = new FirstSolrPojo();
            pojo.setId("100");
            pojo.setZh_all("测试SpringData保存数据1");
            FirstSolrPojo pojo1 = new FirstSolrPojo();
            pojo1.setId("101");
            pojo1.setZh_all("测试SpringData保存数据2");
            FirstSolrPojo pojo2 = new FirstSolrPojo();
            pojo2.setId("102");
            pojo2.setZh_all("测试SpringData保存数据3");
            List<FirstSolrPojo> list = new ArrayList<>();
            list.add(pojo);
            list.add(pojo1);
            list.add(pojo2);
            solrTemplate.saveBeans("bjsxt",list);
            solrTemplate.commit("bjsxt");
        }
    
    展开全文
  • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML、JSON等...
  • solr-7.7.1

    2019-03-13 10:00:11
    Solr是一个独立的企业级搜索应用服务器,基于Lucene。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。它可对外提供类似于Web-service的API接口。用户可以...
  • Solr是一个独立的企业级应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的xml文件, 生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回...
  • Solr-5.3.1

    2018-11-30 08:57:26
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • Solr是一个独立的企业级搜索应用服务器,他对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务提供一定格式的xml文件,生成索引;也可以通过http get 操作提供查找请求,并得到xml格式的...
  • 全文检索-solr

    2021-01-06 19:04:43
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • Solr搜索引擎

    2018-05-06 19:17:11
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • solr中文版

    2018-11-25 13:31:04
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • 基于Basic,安全访问Solr web 摘要:在搭建好Solr以后,我们可以通过Solr Admin Page管理页面简单的使用Solr,当然不希望这样的页面对外公开访问。可以通过认证的方式加密Solr admin page。 注:使用solr版本 为...

    基于Basic,安全访问Solr web

    摘要:在搭建好Solr以后,我们可以通过Solr Admin Page管理页面简单的使用Solr,当然不希望这样的页面对外公开访问。可以通过认证的方式加密Solr admin page。

    注:使用solr版本 为 7.7版本,单机模式

    Solr集成了以下几种验证方式:
    • Basic自定义身份验证方式
    • Kerberos身份验证方式
    • Hadoop身份验证方式
    本文主要介绍Basic自定义身份验证的使用方式,话不多说,直接进入主题

    第一步:在Solr中创建security.json

    在单机模式下,
    创建security.json文件并将其放在server/solr目录下,与solr.xml同目录。
    如果在SolrCloud模式下,还需要将文件security.json上传到ZooKeeper

    security.json格式如下:

    {
    "authentication":{
       "class":"solr.BasicAuthPlugin",1"blockUnknown": true,2"realm":"My Solr users",【3"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}4},
    "authorization":{
       "class":"solr.RuleBasedAuthorizationPlugin",5"permissions":[{"name":"security-edit",
          "role":"admin"}],6"user-role":{"solr":"admin"}7}}
    

    此示例中定义了以下几项内容(对于上述代码中的数字):

    1. 基本身份验证插件已启用。
    2. 'blockUnknown’为true时所有没有凭据的请求都将被拒绝,并显示401错误。如果你允许未经身份验证的请求通过,请设置为false(或完全删除它)。但是,如果特定资源受规则保护,则无论如何都会因401错误而拒绝它们。
    3. 可以覆盖该realm属性以在登录提示上显示另一个文本。
    4. 已定义名为“solr”且具有密码的用户,密码加密处理过。
    5. 基于规则的授权插件已启用。
    6. 定义“admin”角色,并且该角色具有编辑安全设置的权限。
    7. "solr"用户已被定义为"admin"角色。

    permissions 中 name 对应的值为角色权限,下面列出几个常用的权限规则,其他的就不一一阐述了,有需要的可以自己查阅官方文档:

    1. security-edit:允许此权限编辑安全配置,意思当前用户可修改security.json中的规则
    2. security-read:允许此权限读取安全配置
    3. all:全能

    第二步:使用curl命令修改security.json内的权限

    下面列举几个常用的命令,使用具有edit或all权限的用户进行下面的操作

    注:不建议直接手动修改security.json内容
    下面示例为添加自己的用户或编辑密码
    下面示例中添加了两个用户,分别是tom跟harry,命令中的solr是用户的名称,SolrRocks为密码。
    添加成功后查看security.json,可以发现已经多了两个user。

    curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{"set-user": {"tom":"TomIsCool", "harry":"HarrysSecret"}}'
    

    添加成功后可以直接跳到第三步


    删除用户命令

    curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d  '{"delete-user": ["tom", "harry"]}'
    

    更改权限属性

    curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d  '{"set-property": {"blockUnknown":false}}'
    

    创建新权限,覆盖现有权限定义或为角色分配预定义权限

    curl --user solr:SolrRocks  http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json' -d '{
      "set-permission": {"collection": null,
                         "path":"/admin/collections", //匹配请求路径
                         "params":{"action":["LIST", "CREATE"]}, //请求参数的名称和值
                         "before": 3, //在哪个下标之后
                         "role": "admin", //role:提供此权限的角色的名称
                         "method":"GET" //此权限允许的HTTP方法 GET/POST/DELETE/PUT/HEAD
      }
    }'
    
    curl --user solr:SolrRocks -H  http://localhost:8983/solr/admin/authorization 'Content-type:application/json' -d '{
      "set-permission": {"name": "update", "role":"dev"}, //name:权限名  role:提供此权限的角色的名称
      "set-permission": {"name": "read", "role":"guest"}
    }'
    

    更新或删除权限,可以使用/admin/authorization API查看现有权限及其索引。
    以下示例更新’role’,index为3的权限属性:

    curl --user solr:SolrRocks -H 'Content-type:application/json' -d '{
      "update-permission": {"index": 3, //下标
                           "role": ["admin", "dev"]}    //所要删除的权限
    }' http://localhost:8983/solr/admin/authorization
    

    删除示例

    curl --user solr:SolrRocks -H 'Content-type:application/json' -d '{
      "delete-permission": 3 //下标,不指定role表示删除所有权限
    }' http://localhost:8983/solr/admin/authorization
    

    将角色映射到用户

    curl -u solr:SolrRocks -H 'Content-type:application/json' -d '{
       "set-user-role" : {"solr": ["admin","dev"],  //赋予solr用户 ‘admin’、‘dev’权限
                          "harry": null}            //设为null表示删除
    }' http://localhost:8983/solr/admin/authorization
    

    第三步:重启Solr服务器

    直接在bin目录下输入命令 ./solr restart -force

    重启成功后打开客户端,如图:
    使用刚刚创建的用户登录就可以了。
    image

    展开全文
  • Solr实战讲解课程

    2021-06-12 15:25:14
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • solr-4.10.3版本

    2018-06-05 10:28:50
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • solr 5.5.5

    2018-07-18 19:46:43
    ,可以部署到单独的服务器上(WEB服务),它可以提供服务,我们的业务系统就只要发送请求,接收响应即可,降低了业务系统的负载 。solr部署在专门的服务器上,它的索引库就不会受业务系统服务器存储空间的限制。solr...
  • 使用JAVA操作solr

    2021-03-30 09:17:29
    首先需要搭建一个solr环境,在此,我使用docker安装一个solr docker pull solr docker run --name my_solr -d -p ...我们可以使用命令来创建core,也可以使用浏览器发送请求来新增。 我们取名为mycore docker exec -i
  • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • Solr

    2021-06-14 03:15:39
    Solr概述Solr是一个独立的企业级搜索应用服务器,它对外提供类似于的API...Solr安装部署下载Solr说明:Solr与Lucene是同步更新的,课程中使用4.10.3版本解压Solr目录结构说明:bin:solr运行脚本contrib:solr的一...
  • 搜索案例solr

    2015-12-29 15:29:08
    solr是一个企业级搜索应用服务器它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。...
  • solr-5.5.1.zip

    2018-03-29 16:36:00
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • Solr学习总结(三)Solr web 管理后台

    千次阅读 2018-07-14 18:08:06
    还有solr 自带的web 管理系统如何使用等。只有先明白了solr的基本内容,后续学习solr 的C#和数据库操作,才不会费劲。本人刚开始也是配置完solr 之后,直接找solr客户端,写相应的测试代码,但是由于...
  • Solr环境配置必备

    2020-01-21 20:30:07
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • Administrating Solr.pdf

    2020-01-20 10:08:19
    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...
  • 搜索引擎Solr

    2021-08-15 22:24:15
    1. solr简介 1.1 官网介绍 Solr是一个基于Lucene的Java搜索引擎服务器。Solr提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XML/XSLT和 JSON格式)。 它易于安装和配置,而且附带了一个基于HTTP的管理界面。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,404
精华内容 4,961
热门标签
关键字:

web请求solr