`

solr的索引和查询顺序

阅读更多

 拜读了solr的部分源码,却急于弄明白solr的索引顺序和查询顺序,如下是探访结果.

 所有的配置都在solr/example/solr/conf/schema.xml当中.

 

<!-- 如下是对text类型的处理 -->
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
 <!-- 索引顺序1空格2同义词3过滤词4拆字5小写过滤6关键字7词干抽取算法-->
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <!-- Case insensitive stop word removal.
          add enablePositionIncrements=true in both the index and query
          analyzers to leave a 'gap' for more accurate phrase queries.
        -->
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
     <!-- 查询顺序1空格2同义词3过滤词4拆字5小写过滤6关键字7词干抽取算法-->
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>


    <!-- Less flexible matching, but less false matches.  Probably not ideal for product names,
         but may be good for SKUs.  Can insert dashes in the wrong place and still match. -->
   <!-- 针对textTight类型-->
    <fieldType name="textTight" class="solr.TextField" positionIncrementGap="100" >
 <!-- 查询顺序1空格2同义词3过滤词4拆字5小写过滤6关键字7英文相近词8去除重复词
 -->
      <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.EnglishMinimalStemFilterFactory"/>
        <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
             possible with WordDelimiterFilter in conjuncton with stemming. -->
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
    </fieldType>


    <!-- A general unstemmed text field - good if one does not know the language of the field -->
 <!-- 针对textgen类型 -->
    <fieldType name="textgen" class="solr.TextField" positionIncrementGap="100">
     <!-- 索引顺序1空格2过滤词3拆字4小写过滤-->
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
<!-- 查询顺序1空格2同义词3过滤词4小写过滤-->
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>


    <!-- A general unstemmed text field that indexes tokens normally and also
         reversed (via ReversedWildcardFilterFactory), to enable more efficient 
	 leading wildcard queries. -->
   <!-- 针对text_rev类型 -->
    <fieldType name="text_rev" class="solr.TextField" positionIncrementGap="100">
  <!-- 索引顺序1空格2过滤词3拆字4小写过滤6转义通配符-->
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
           maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
      </analyzer>
 <!-- 查询顺序1空格2同义词3过滤词4拆字5小写过滤 -->
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

    <!-- charFilter + WhitespaceTokenizer  -->
    <!--
    <fieldType name="textCharNorm" class="solr.TextField" positionIncrementGap="100" >
      <analyzer>
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      </analyzer>
    </fieldType>
    -->

    <!-- This is an example of using the KeywordTokenizer along
         With various TokenFilterFactories to produce a sortable field
         that does not include some properties of the source text
      -->
    <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <!-- KeywordTokenizer does no actual tokenizing, so the entire
             input string is preserved as a single token
          -->
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <!-- The LowerCase TokenFilter does what you expect, which can be
             when you want your sorting to be case insensitive
          -->
        <filter class="solr.LowerCaseFilterFactory" />
        <!-- The TrimFilter removes any leading or trailing whitespace -->
        <filter class="solr.TrimFilterFactory" />
        <!-- The PatternReplaceFilter gives you the flexibility to use
             Java Regular expression to replace any sequence of characters
             matching a pattern with an arbitrary replacement string, 
             which may include back references to portions of the original
             string matched by the pattern.
             
             See the Java Regular Expression documentation for more
             information on pattern and replacement string syntax.
             
             http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/package-summary.html
          -->
        <filter class="solr.PatternReplaceFilterFactory"
                pattern="([^a-z])" replacement="" replace="all"
        />
      </analyzer>
    </fieldType>
    
    <fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" >
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
      </analyzer>
    </fieldtype>

    <fieldtype name="payloads" stored="false" indexed="true" class="solr.TextField" >
      <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <!--
        The DelimitedPayloadTokenFilter can put payloads on tokens... for example,
        a token of "foo|1.4"  would be indexed as "foo" with a payload of 1.4f
        Attributes of the DelimitedPayloadTokenFilterFactory : 
         "delimiter" - a one character delimiter. Default is | (pipe)
	 "encoder" - how to encode the following value into a playload
	    float -> org.apache.lucene.analysis.payloads.FloatEncoder,
	    integer -> o.a.l.a.p.IntegerEncoder
	    identity -> o.a.l.a.p.IdentityEncoder
            Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
         -->
        <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
      </analyzer>
    </fieldtype>

    <!-- lowercases the entire field value, keeping it as a single token.  -->
    <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
    </fieldType>

    大致的索引顺序会是:

 1.空格..............................solr.WhitespaceTokenizerFactory

    2同义词............................solr.SynonymFilterFactory

    3过滤词...........................solr.StopFilterFactory

    4拆字..............................solr.WordDelimiterFilterFactory

    5小写过滤.....................solr.LowerCaseFilterFactory

    6关键字.........................solr.KeywordMarkerFilterFactory

    7词干抽取算法............solr.PorterStemFilterFactory

 

 大致的搜素顺序是:

 

 1.空格..............................solr.WhitespaceTokenizerFactory

    2同义词............................solr.SynonymFilterFactory

    3过滤词...........................solr.StopFilterFactory

    4拆字..............................solr.WordDelimiterFilterFactory

    5小写过滤.....................solr.LowerCaseFilterFactory

    6关键字.........................solr.KeywordMarkerFilterFactory

    7英文相近词..................solr.EnglishMinimalStemFilterFactory

    8去除重复词.................solr.RemoveDuplicatesTokenFilterFactory

 

    当然了,你可以根据自己的权重来重新分配索引和搜素顺序

 

分享到:
评论

相关推荐

    solr实现电商自定义打分

    这通常涉及到修改`schema.xml`或`managed-schema`文件,定义新的查询字段类型和查询解析器。例如,可以创建一个新的查询解析器,专门为自定义打分设计。 此外,Solr还支持插件开发,可以编写自定义的`Similarity`类...

    Solr的配置

    Solr支持复杂的查询语法,能够实现高度灵活的索引配置和搜索结果排序。本文档主要介绍Solr的基本配置流程。 #### Solr目录结构 在安装Solr之后,了解其目录结构对于后续配置至关重要。Solr的主要目录包括: - **...

    solr概念介绍

    - **快速响应**:Solr通过高效的索引机制确保了查询速度极快,即使是面对海量数据也能迅速返回结果。 - **良好的可扩展性**:Solr支持水平扩展,即可以通过增加服务器节点的方式提升系统性能和存储容量。 - **易于...

    java多线程处理执行solr创建索引示例

    Solr是一个流行的开源全文搜索引擎,它提供了一个强大的、高度可配置的索引和查询服务。在处理大量数据时,单线程的索引创建可能成为性能瓶颈,因此采用多线程技术可以显著提高索引构建的速度。 在这个示例中,我们...

    solr 企业搜索引擎教程

    - **综合统计信息**:提供关于缓存使用、更新和查询的统计信息。 - **文本分析调试**:可视化展示文本分析流程的各个阶段。 - **基于Web的查询调试**:帮助开发者理解和优化查询结果。 #### 3. Solr 的服务原理 ...

    solr-4.10.3

    10. **评分和排序**:Solr根据相关性对搜索结果进行评分,并提供多种排序选项,使用户可以按需调整搜索结果的顺序。 在Solr-4.10.3的压缩包中,通常会包含以下文件和目录: 1. `bin`:包含启动和管理Solr的脚本。 ...

    solr in action

    - **高度可配置**:Solr提供了灵活的配置选项,可以根据具体场景调整索引结构和查询策略。 - **强大的功能集**:除了基本的全文检索功能外,Solr还支持自动完成、拼写检查、高亮显示等多种高级特性。 #### 4. 功能...

    apache-solr-ref-guide-7.1.pdf

    “Query Syntax and Parsing”部分提供了关于查询语法和查询解析的详细信息。 “JSON Request API”部分讲述了使用JSON格式发送请求的API,这是Solr支持的几种请求格式之一。 “Faceting”部分介绍了如何在搜索...

    solr facet 笔记

    Solr 是一个流行的开源搜索引擎,提供了丰富的功能,其中包括 Facet(分面)查询,它能够帮助用户在大量数据中进行高效、多维度的筛选。Facet 查询是数据分析和信息检索中的一个重要工具,允许用户查看数据的不同...

    开源企业搜索引擎SOLR的 应用教程

    Solr不仅提供了强大的全文搜索能力,还能支持复杂的查询需求,并且具有良好的可扩展性和可靠性,是企业级搜索项目的首选。 **1.2 Solr的特性** - **1.2.1 Solr使用Lucene并且进行了扩展** Solr的核心是基于Lucene...

    solr-7.7.3.rar

    3. **配置与管理**:在解压后的文件中,我们通常会看到`conf`目录,它包含Solr的各种配置文件,如`schema.xml`用于定义字段类型和字段,`solrconfig.xml`用于设置索引和查询行为。此外,`server`目录下的`solr`子...

    应用分布式索引提高海量数据查询性能.pdf

    针对这一问题,文章提出了一种新的处理模式——引入分布式Solr索引层。在这种模式下,索引层会预先对数据库记录建立索引,查询操作不再直接作用于数据库而是直接访问索引层。这种改变可以显著提高查询性能,尤其在...

    solr集群安装手册

    通过上述分析可以看出,SolrCloud 结合 Zookeeper 不仅解决了大规模索引和检索的问题,还提供了集中式配置管理、服务发现、分布式锁及集群管理等一系列高级特性,极大提升了分布式系统的稳定性和可扩展性。...

    Solr java分词器

    这些组件按照特定顺序执行,构建出适合索引和查询的文本表示。 标签中提到的“源码”和“工具”,意味着我们将讨论分词器的实现原理和可能用到的开发工具。分词器的源码可以帮助开发者理解其工作原理,进行定制或...

    Solr Reference Guide

    Solr支持复杂的查询语法,并且可以通过RESTful API进行交互,这使得Solr成为企业级搜索和大数据分析领域的首选工具之一。 #### 二、核心概念与功能 根据给定的内容片段,我们可以推断出以下核心概念与功能: 1. *...

    Solr_1.4_Enterprise_Search_Server.pdf

    此外,本书还涉及了Solr的安装配置、索引管理、查询解析等多个方面的内容,覆盖了从入门到精通的完整学习路径。作者David Smiley和Eric Pugh凭借其深厚的专业背景和丰富的实践经验,为读者提供了深入浅出的讲解和...

    lucene3.5学习笔记

    - Solr 中如何进行索引和查询操作。 --- #### 六、其他工具和技术 **6.1 Luke** - Luke 是一个用于查看和编辑 Lucene 索引的工具。 - 可以帮助诊断索引问题。 **6.2 Tika** - Apache Tika 是一个内容分析工具...

    morphlines.confmorphline-hbase-mapper.xml

    当我们在HBase上构建二级索引时,通常会利用Solr来提升查询性能,特别是对于那些需要进行复杂查询和全文搜索的应用场景。 标题提到的"morphlines.conf"和"morphline-hbase-mapper.xml"是这两个关键步骤中的配置文件...

    百亿级数据的秒级复杂查询技术设计.pptx

    Coprocessor作为核心组件,处理主要的逻辑,包括索引创建和查询优化。 【索引创建过程】 为避免Region Split破坏数据索引,Pharos在数据加载后,Region稳定时加载索引。此外,它采用了影子列族存储策略,将数据和...

Global site tag (gtag.js) - Google Analytics