首页 > 其他分享 >solr

solr

时间:2023-09-17 23:37:57浏览次数:29  
标签:core printStackTrace client catch import 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, product_id from product_task">
            <field column="id" name="id"></field>
            <field column="product_id" name="product_id"></field>
        </entity>
    </document>
</dataConfig>

select * from  core_url u where u.关联字段名称 in(select b.关联字段名称 from  core_b b where 查询条件)

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();
        }
    }
}

标签:core,printStackTrace,client,catch,import,solr
From: https://www.cnblogs.com/dzystudy/p/17710235.html

相关文章

  • 什么是Solr
    一. 什么是Solr?其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊!每当你想买自己喜欢的东东时,你可能会打开某宝或者某东,像这样一搜,就能搜到很多东西,你知道你看到的这些数据都来自哪儿吗?百度一下你就知道!这些数据来自哪儿吗?等你了解完Solr......
  • Linux安装Solr-8.9.0
    Solr的工作原理可以简单地概括为以下几个步骤:1.索引创建:首先,Solr需要创建一个索引,用于存储要搜索的数据。索引是基于ApacheLucene构建的,它将文档拆分为字段,并对字段进行分析和标记化,以便进行更有效的搜索和匹配。2.数据导入:Solr可以从多种数据源导入数据,包括数据库、文件、Web......
  • ZooKeeper(外部)实例 + SolrCloud(tomcat)实例
    Solr学习(三)单独ZooKeeper(外部)实例+SolrCloud(tomcat)实例博客分类: JavaSolrLucenesolr4.2.0ZooKeeperSolrSolrCloud 开场白:简单讲述如何配置独立的外部ZooKeeper集群管理组件来管理solr集群(多实例solr)本章建立在 Solr学习(一)  、Soer学习(二)基础上......
  • SolrCloud相关资料
    Thispageisnotnecessarilykeptuptodate-forthelatestSolrClouddocumentationsee https://cwiki.apache.org/confluence/display/solr/SolrCloud ContentsSolrCloudAlittleaboutSolrCoresandCollectionsGettingStartedExampleA:Simpletwoshardclus......
  • solr的master-slave和Multiple Cores
    Solrmulticore配置April21st,2011绚丽也尘埃LeaveacommentGotocommentsSolr继续学习中,感觉Solr的multicore主要用途有两个:1、充分利用服务器资源。在一台服务器上部署不用的搜索应用。2、提高一个应用服务能力,在服务器上同时部署同一个应用的多个core,这些core共用一份索......
  • Solr的自动完成/自动补充实现及经验
    http://hankesi2000.iteye.com/Solr的自动完成/自动补充实现介绍(第一部分)博客分类:solr+lucenesolrfacetautocomplete原文:http://java.dzone.com/news/solr-and-autocomplete-part-1大部分人已经见过自动完成(autocomplete)的功能了(见下图),solr提供了构建这个功能的机制。今......
  • solr亿万级索引优化实践
    一海量数据的索引,第一个要解决的是数据存储的问题,solr提供数据存储平台有两种,第一个是本地磁盘,另一个是HDFS,我们可以通过solrhome的配置来实现。在本次实践中,我们选择的是本地磁盘,因为采用的solrcloud部署模式,本身就是多节点多机器,在存储上不会有问题,还有另一个重要的原因后面会......
  • Solr性能优化
    一、简介Solr性能优化是一个很复杂的任务,也是一个长期与之斗争的过程。在开始之前,首先要对影响Solr性能的基本因素有个大致的认知。影响Solr性能的一个主要因素就是内存。Solr需要有足够的内存用于两个方面:一部分用于Java堆内存,一部分用于操作系统的硬盘缓存。另外一个潜......
  • Teamcener AWC Solr链接被拒
    1.检查安装Solr安装情况2.在tem上勾选添加安装完成后,总共有2个文件夹需要注意,一个solr-版本的文件夹,一个TcFTSindexer的文件夹如果是solr安装的是服务,则不需要管solr-版本这个文件夹,如果是命令行启动,则需要手动去这个文件夹下启动,另外TcFTSindexer这个下面的runTcFTSin......
  • solr基础
    简介   介绍Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强......