精华内容
下载资源
问答
  • Solr--Solr 索引库

    2020-05-05 20:49:45
    Solr 索引库    1 solr home目录结构    1.1 solr.xml 配置 solr 集群    1.2 collection1 (索引库solr core )    1.3 core.properties 设置索引...

    Solr 索引库

       1 solr home目录结构

    在这里插入图片描述
       1.1 solr.xml 配置 solr 集群
       1.2 collection1 (索引库:solr core )
       1.3 core.properties 设置索引库的名称
       1.4 data 存放索引
       1.5 conf 索引库的配置目录
          1.5.1 schema.xml: 配置字段以及字段类型
    在这里插入图片描述

       2 索引库配置

          schema.xml 是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,是否分词,是否存储等等。

          2.1 如何定义索引库中的 Field

    <field>:定义域
        <field name="_version_" type="long" indexed="true" stored="true"/>
    
    • name:表示域的名称,是强制必须有的属性
    • type:域类型的名称,与 fieldType 元素的 name 属性值对应,是强制必须有的属性
    • indexed:是否参与检索。true 即表示需要对该域进行索引。默认值为
    • stored:是否将 field 域中的内容存储到文档域,简单通俗的来说,就是你这一个field 需不需要被当作查询结果返回。
    • required:表示这个域是否是必须要在 document 中存在,默认值为 false,如果此配置项设为 true,则你的 document 中必须要添加此域,否则你创建索引时会抛异常。

          2.2 如何定义索引库中的 FieldType

     <fieldType>:定义域的类型
       <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
    
    • name:域类型的名称,作为域类型标识符存在,在定义域(Field)时使用的类型(FieldType)属性就是域类型的名称。
    • class:域类型的数据类型,该属性指向的是 solr 中的已定义的类型,或者是用户定义的类型,域类型中的数据会被初始化成 class 执行类类的对象。
    • sortMissingFirst/sortMissingLast:控制当排序域的值不存在时该文档(Document)所在队列的位置。true 是则在队头/队尾

          2.3 如何定义索引库中的 CopyField

      <copyField>: 复制域。可实现更新与查询分离
         <copyField source="item_title" dest="item_keywords"/>
    
     Source:源域
     Dest:目标域
    

       3 Solr 的索引机制

          3.1 正排索引(正向索引)
          正排索引是以文档的 ID 为关键字,索引文档中每个字的位置信息,查找时扫描索引中每个文档中字的信息直到找出所有包含查询关键字的文档。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。
          尽管正排索引的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。
          正排索引从文档编号找词
    在这里插入图片描述      3.2 倒排索引(反向索引)
          对数据进行分析,抽取出数据中的词条,以词条作为 key,对应数据的存储位置作为value,实现索引的存储。这种索引称为倒排索引。
          当 solr 存储文档时,solr 会首先对文档数据进行分词,创建索引库和文档数据库。所谓的分词是指:将一段字符文本按照一定的规则分成若干个单词。
          倒排索引是从词找文档编号
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 《 Linux下Solr索引库的维护 》 1、新增文档 solr索引库中新增文档,添加一个json格式的文档,如下图: 2、查询文档 在solr索引库中查询制定文档,输入 " 业务字段:字段值 " ,如下图:...




    《 Linux下Solr索引库的维护 》




    1、新增文档
    solr索引库中新增文档,添加一个json格式的文档,如下图:



    2、查询文档
    在solr索引库中查询制定文档,输入 " 业务字段:字段值 " ,如下图:



    3、利用搜索域进行模糊查询
    如果需要模糊查询,这时就需要用到在schema.xml中配置搜索域了,需要在 " df " 框中指定搜索域,
    这个好处可以在当索引库中文档比较多时,它会体现的淋淋尽致,如下图:



    4、修改文档
    solr索引库中修改文档,只需要添加一个新的文档,但是要求文档id和被修改文档的id一致。
    修改的实现原理是先删除索引库中同名id的文档,然后再添加新的文档,如下图:



    再查询一下,验证修改结果!!!

    注意:在solr索引库中没有update关键字的概念。如下图:



    5、删除文档
    删除文档,type需要选择xml
    删除两种方法:
    第一种:根据id删除


    <delete>
    <id>1982</id>
    </delete>


    <commit/>


    如下图:



    第二种:根据查询删除


    <delete>
    <query>id:1982</query>
    </delete>


    <commit/>


    如下图:



    上一篇:《 Solr下使用IK-Analyzer实现中文分词器的配置详情 》







    展开全文
  • (solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用《五分钟solr4.5教程(搭建、运行)》中讲到的用xml文件的形式提交数据到索引库,其实没有那么麻烦,solr配套有好多的客户端用于...

    solr库搭建参考我的博客:https://blog.csdn.net/tomcatAndOracle/article/details/80306018

    (solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用《五分钟solr4.5教程(搭建、运行)》中讲到的用xml文件的形式提交数据到索引库,其实没有那么麻烦,solr配套有好多的客户端用于操作索引库,下面我们来讲如何用solrj去操作solr索引库。

    一、认识solrj

    solrj是solr的java客户端,用于访问solr索引库。它提供了添加、删除、查询、优化等功能。

     

    二、下载

              百度、google以下solrj下载,你会发现根本就没有,那么我们该到哪儿下载呢?其实,它是集成到solr压缩包里的,解压文件后,有个目录/dist/solrj-lib,里面就存放了solrj所用到的jar,你把这些jar都添加到你的classpath就ok。

    如果你是使用Maven来构建项目,添加以下代码到你的pom.xml配置文件中:

    <dependency> 
            <artifactId>solr-solrj</artifactId> 
            <groupId>org.apache.solr</groupId> 
            <version>1.4.0</version> 
            <type>jar</type>
            <scope>compile</scope> 
    </dependency>
    <dependency> 
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.5.6</version> 
    </dependency>

     

    三、创建SolrServer

    1、HttpSolrServer

    solrj是采用http请求的方式去访问solr索引库的,首先我们得先创建一个HttpSolrServer,如下:

    String url = "http://localhost:8983/solr";//8983是web服务器的端口号,需要根据情况进行调整
    SolrServer server = new HttpSolrServer( url );

    以上使用默认的方式创建server,你也可以配置其他的连接参数:

    String url = "http://localhost:8983/solr" ; HttpSolrServer server = new HttpSolrServer( url ); server.setMaxRetries(1); // defaults to 0. > 1 not recommended.  server.setConnectionTimeout(5000); // 5 seconds to establish TCP // Setting the XML response parser is only required for cross // version compatibility and only when one side is 1.4.1 or // earlier and the other side is 3.1 or later. server.setParser(new XMLResponseParser()); // binary parser is used by default // The following settings are provided here for completeness. // They will not normally be required, and should only be used // after consulting javadocs to know whether they are truly required. server.setSoTimeout(1000); // socket read timeout server.setDefaultMaxConnectionsPerHost(100); server.setMaxTotalConnections(100); server.setFollowRedirects(false); // defaults to false // allowCompression defaults to false. // Server side must support gzip or deflate for this to have any effect. server.setAllowCompression(true);

    2、EmbeddedSolrServer

    EmbeddedSolrServer提供了和HttpSolrServer一样的接口,区别是EmbeddedSolrServer没有通过http连接。

    //Note that the following property could be set through JVM level arguments too
    
    System.setProperty("solr.solr.home", "d:/solr_home/solr"); //此处配置solr home,根据自己的情况修改
    CoreContainer.Initializer initializer = new CoreContainer.Initializer(); 
    CoreContainer coreContainer = initializer.initialize(); 
    EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");

    当然实际中可能不止一个core,那么采用如下方式:

    File home = new File( "d:/solr_home/solr" );//此处配置solr home,根据自己的情况修改
    File f = new File( home, "solr.xml" );
    
    CoreContainer container = new CoreContainer();
    
    container.load( "d:/solr_home/solr", f );
    
        
    EmbeddedSolrServer server = new EmbeddedSolrServer( container, "core name as defined in solr.xml" );//双引号配置你的core名字
    ...

    在嵌入式的应用中使用solr,推荐使用EmbeddedSolrServer。

    注意:EmbeddedSolrServer使用有个前提条件,需要在solrconfig.xml配置相对应的RequestHandler,如:/update对应更新操作。

     

    四:solrj的使用

    创建好server以后,我们就可以开始solrj操作索引库了!!

    首先创建一个server,最好的方式是采用单例模式,不要重复去创建。

    SolrServer server = new HttpSolrServer("http://HOST:8983/solr/");

    1、添加文档到索引库

    //创建一个文档

    SolrInputDocument doc1 = new SolrInputDocument(); 
    doc1.addField( "id", "id1", 1.0f ); 
    doc1.addField( "name", "doc1", 1.0f );
    doc1.addField( "price", 10 );

    //再创建一个文档

    SolrInputDocument doc2 = new SolrInputDocument(); 
    doc2.addField( "id", "id2", 1.0f );
     doc2.addField( "name", "doc2", 1.0f );
     doc2.addField( "price", 20 );

    //创建一个collection,把以上两个文档添加进去

    Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
    docs.add( doc1 );
     docs.add( doc2 );

    //把文档添加到server中

    server.add( docs );

    //提交文档

    server.commit();//此处只是提交到索引中,不会出现在搜索结果中;如果想立马搜索,请使用commit(boolean waitFlush, boolean waitSearcher)方法

    如果你想添加到server后想快速提交(commit),可以采用如下方式:

    UpdateRequest req = new UpdateRequest(); 
    req.setAction( UpdateRequest.ACTION.COMMIT, false, false ); 
    req.add( docs ); 
    UpdateResponse rsp = req.process( server );

    2、添加pojo到索引库

    除了通过文档的形式提交以外,solrj还可以通过pojo的方式提交。使用注解@Field映射到schema.xml中定义的字段中

    创建一个javaBean:

    import org.apache.solr.client.solrj.beans.Field; 
    public class Item { 
        @Field 
        String id; 
        @Field("cat")//自定义字段名
        String[] categories; 
        @Field
        List<String> features;
    
        public void setId(String id) {
            this.id = id;
        }
    
        public void getId() {
            return this.id;
        }
    
        //其他get、set方法
    
    }

    创建JavaBean的实例:

    Item item = new Item(); 
    item.id = "one";
    item.categories = new String[] { "aaa", "bbb", "ccc" };

    添加到server中:

    server.addBean(item);

    提交到索引:

    server.commit();

    还可以同时添加多个javaBean:

    List<Item> beans ;
    //add Item objects to the list  
    server.addBeans(beans);

    3、删除索引

    server.deleteById(String id);
    或者
    deleteById(List<String> ids);

    4、更新索引

    solr索引库不同于数据库,没有更新的功能。如果想更新,先通过id删除对应的文档,再添加新的文档。

    5、查询索引

    SolrQuery query = new SolrQuery();
    query.setQuery( "*:*" ); 
    query.addSortField( "price", SolrQuery.ORDER.asc );
    QueryResponse rsp = server.query( query );

    //文档方式读取

    SolrDocumentList docs = rsp.getResults();//实际项目中如果业务比较复杂,采用这种方式显得比较灵活

    //使用javaBean的方式读取

    List<Item> beans = rsp.getBeans(Item.class);

    6、高级使用

    SolrServer server = getSolrServer(); 
    SolrQuery solrQuery = new SolrQuery()
                          . setQuery("ipod")
                          . setFacet(true)
                          . setFacetMinCount(1)
                          . setFacetLimit(8)
                          . addFacetField("category")
                          . addFacetField("inStock");
    QueryResponse rsp = server.query(solrQuery);

    7、高亮显示

    SolrQuery query = new SolrQuery(); query.setQuery("foo");
    query.setHighlight(true).setHighlightSnippets(1); 
    //set other params as needed 
    query.setParam("hl.fl", "content");
    QueryResponse queryResponse = getSolrServer().query(query);

    处理高亮显示结果:

    Iterator<SolrDocument> iter = queryResponse.getResults().iterator(); 
    while (iter.hasNext()) { 
        SolrDocument resultDoc = iter.next(); 
        String content = (String) resultDoc.getFieldValue("content"); 
        String id = (String) resultDoc.getFieldValue("id"); //id is the uniqueKey field
        if (queryResponse.getHighlighting().get(id) != null) {
            List<String> highlightSnippets = queryResponse.getHighlighting().get(id).get("content"); 
        } 
    }
    
    

    展开全文
  • solr配置中文解析器和将数据导入solr索引库时所需的jar包
  • solr索引库的创建

    2017-11-17 16:28:00
    solr索引库的创建 一、找到你安装的【solrhome】目录(我的是这个) 二、进入该目录 三、选择其中任意一个索引库复制一份到该目录下并更名为要创建的索引库名称 四、进入【myindex】目录下,该目录...

    solr索引库的创建

     一、找到你安装的【solrhome】目录(我的是这个)

     

     二、进入该目录

     

    三、选择其中任意一个索引库复制一份到该目录下并更名为要创建的索引库名称

     

     四、进入【myindex】目录下,该目录下会有2个目录1个配置文件

    五、删除【data】目录和【core.properties】配置文件,保留【conf】目录

     

     六、启动tomcat_solr服务,在页面输入服务器地址:端口号/solr

     

     七、在solr服务管理页面选择左侧的【core Admin】选项

     

     八、点击右侧【add core】添加索引库

     

     

     这样表示创建成功索引库了

     

     九、返回【solrhome】目录,进入【myindex】目录,目录下会增加1个【data】目录和【core.properties】配置文件

     

    十,测试上传数据就可以了。

     

    转载于:https://www.cnblogs.com/li-zx/p/7852253.html

    展开全文
  • 利用solrJ向索引库导入数据 ...需求:将MySQL中的数据导入到solr索引库 定义实体类: [java] view plain copy publicclassSearchItemimplementsSerializable{ privateStringid; privateStringtitle; ...
  • <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
  • solr索引库添加

    2017-09-20 16:17:54
    1.solr的安装与配置 ...http://blog.csdn.net/Jason763/article/details/728774162.分析需要导入索引库的数据信息,将这些属性重新封装成一个POJO类 同时别忘了依赖SOLR架包3.编写Mapper.java和M
  • Solr索引库可用作实现搜索功能,并发性能比MySQL更好。 Spring整合Solr Spring配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework...
  • 维护solr索引库

    2018-11-29 15:49:26
     一个solr下可以有多个solrcore,每个solrcore就是一个独立的索引库 3)solrconfig.xml  lib:配置solr的扩展包的位置,不指定路径的话就是collection1/lib目录,可以自动加载。如果没有需要手动创建  dataDir:...
  • solr索引库添加新的索引,可以在使用dataimport插件进行定时增量插入。 也可以使用外部数据封装到json文件或者xml文件中进行增量添加,二者的区别就是使用的包不同,json文件格式使用fastJson包,xml文件格式使用...
  • solr索引库总结

    千次阅读 2016-11-19 11:36:00
    solr总结:  1.什么是solr?  全文检索的服务器。基于Lucene开发  2.安装并运行solr服务  安装:contribute、dist、solr运行需要依赖的jar  example:1.可独立运行的程序(start.jar---jetty)  2.webapps...
  • -- solr客户端 --> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> </dependency> 基础操...
  • solr索引库的维护

    2017-04-13 20:07:41
    修改:在solr中没有update,只需要添加一个新的文档,要求文档id和被修改文档的id一致。原理是先删除后添加。 删除:使用xml格式。 删除有两种方式:1、根据id删除: <id>test001 2、根据查询删除: *:* </
  • 在前面的几篇文章中笔者已经简单的介绍了solr是什么,以及solr的安装和业务字段的配置,并且也安装好了中文分词器。本文将简单的介绍一下solr索引库的维护知识。
  • solr 索引库的维护

    2018-03-07 10:51:01
    一、配置中文分析器:IK-analyzer,... 2 在该目录中,我们需要的东西有:IKAnalyzer的jar包,IKAnalyzer.cfg.xml,mydict.dic和ext_stopword.dic 3 需要把这个jar包添加到solr工程中: cd IKAnalyzer/ cp IKAna...
  • Python操作Solr索引库

    2018-04-16 11:28:00
    params = {"boost":1.0,"overwrite":"true","commitWithin":1000} # overwrite:如果solr中已经有这个id的数据,将其覆盖 url = 'http://127.0.0.1:8080/solr/collection1/update?wt=json' # 请求url headers = ...
  • solr添加IK分词器,spring-solr提供的SolrTempalte实现数据导入,实现数据查找,高亮显示,将为大家一一写明
  • 将数据库中的数据导入Solr索引库

    千次阅读 2017-08-06 20:43:06
    在前面的文章中介绍了solr的一些配置和功能,这篇文件开始讲如何具体使用solr。将数据库中的数据导入索引库在大部分应用中,主要还是使用的是数据库中的数据,因此,这一步还是非常重要的。
  • 前几天发表了一篇Tomcat 集成 Solr5.5.4的文章,今天跟大家分享一下如何创建索引库和如何安装中文分词功能。 首先先介绍一下solr Web界面上一些内容的含义: Dashboard(仪表盘):访问主页,默认显示此页内容,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,240
精华内容 6,096
关键字:

solr索引库