zoukankan      html  css  js  c++  java
  • 【Solr】copy字段的应用

     

    目录

    界面查询应用

    添加一个文档

    查询添加的文档

    以上详细介绍了query里面的参数详解。

    当不输入任何条件时,进行查询,看看返回结果。

    返回了刚才添加进去的文档。

    添加文档时,我们添加了id,title,content 分词,那么如果我们想自己定义,该如何?

    {"id":"change.me","aaaaaa":"change.me"}

    结果返回错误:

    Status: error
    Error: Bad Request
    Error:
    {
      "responseHeader": {
        "status": 400,
        "QTime": 1
      },
      "error": {
        "msg": "ERROR: [doc=change.me] unknown field 'aaaaaa'",
        "code": 400
      }
    }

    不能发现 aaaaaa 这个filed!!

    熟悉两个重要的文档

    1.Schema.xml

    schema.xml位于solr/conf/目录下,类似于数据表配置文件,定义了加入索引的数据的数据类型,主要包括type、fields和其他的一些缺省设置。

      Field:域的定义

    • Name:域的名称
    • Type:域的类型
    • Indexed:是否索引
    • Stored:是否存储
    • multiValued:是否多值,如果是多值在一个域中可以保持多个值。
    • dynamicField动态域

      dynamicField:动态域

    • Name:域的名称,是一个表达式。如果域的名称和表达式相匹配,此域名就可以使用。
    • Type:域的类型
    • Indexed:是否索引
    • Stored:是否存储
    • multiValued:是否多值,如果是多值在一个域中可以保持多个值。

      uniqueKey

    • 每个文档必须有一个uniqueKey,而且不能重复。相当于表中的主键。

      copyField

    • 复制域。
    • Source:源域
    • Dest:目标域。
    • 创建文档时,solr会自动把源域的内容复制到目标域。使用复制域可以提供查询的性能。

      fieldType

    • 域的类型。
    • Name:域类型名。
    • Class:对应的实现类。solr.TextField类似于Lucene中的TextField。可以配置用户自定义的分析器。

    存储的都是一些solr内置的字段。

    可以自己定义一些字段和类型

    solr/collection1/conf

    找到Schema.xml文件,进行添加

       <!-- Anny  配置字段-->
       <field name="title_ik" type="text_ik" indexed="true" stored="true"/>
       <field name="content_ik" type="text_ik" indexed="true" stored="true" multiValued="true"/>
    
       <!-- IKAnalyzer- 配置类型-> 采用中文分词器
       <fieldType name="text_ik" class="solr.TextField">
         <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
       </fieldType>
       <!--IKAnalyzer Field-->

      

      配置步骤:

    • 第一步:把IKAnalyzer2012FF_u1.jar添加到solr工程的lib库中。
    • 第二步:把配置文件和扩展词典、停用词词典添加到solr工程classpath下。Solr/WEB-INF/classes。保证字典的字符集是utf-8.注:classes没有这个文件夹手动创建就好!

         jar包下载地址:http://pan.baidu.com/s/1skphG9v

    IKAnalyzer.cfg.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
    <properties>  
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典     -->
        <entry key="ext_dict">ext.dic</entry> 
    
        <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">stopword.dic;</entry> 
        
    </properties>

    ext.dic配置文件

    惠民
    中商惠民www
    baby
    屌丝男士
    野菊花
    向日葵
    菊花
    葵花

    注:如果文档第一行的词,没有进行分词处理,那么就验证了第一行不进行分词。可以空一行!

    配置完毕后,进行重启tomcat即可访问。

    copy域的应用

    将数据库的字段创建类型和域

    <!--product-->
       <field name="product_name" type="text_ik" indexed="true" stored="true"/>
       <field name="product_price"  type="float" indexed="true" stored="true"/>
       <field name="product_description" type="text_ik" indexed="true" stored="false" />
       <field name="product_picture" type="string" indexed="false" stored="true" />
       <field name="product_catalog_name" type="string" indexed="true" stored="true" />
    
       <field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
       <copyField source="product_name" dest="product_keywords"/>
       <copyField source="product_description" dest="product_keywords"/>

    copyField域  

    <copyField source="product_name" dest="product_keywords"/> 创建索引product_name,复制到product_keywords里面了。
    把多个域的关键词复制到同一个域,多个域时,可以放到一个域中。就不用定义那么多域了。搜索比较方便。


  • 相关阅读:
    [备份]部分常用函数
    [考试]20150904
    [考试]20150903
    [未完成][知识点]动态规划优化初步
    [考试]20150822
    [考试]20150821
    [知识点]后缀数组
    [考试]20150816
    [考试]20150815
    BZOJ2815: [ZJOI2012]灾难
  • 原文地址:https://www.cnblogs.com/anny0404/p/5231144.html
Copyright © 2011-2022 走看看