solr 搜索引擎搭建和使用 (二)

    xiaoxiao2021-11-29  88

    3配置文件

    3.1、模式配置Schema.xml

           schema.xml这个配置文件可以在D;\data\solr \collection1\conf中找到,它就是solr模式关联的文件。打开这个配置文件,你会发现有详细的注释。模式组织主要分为三个重要配置

    3.1.1. types 部分

           types是一些常见的可重用定义,定义了 Solr(和 Lucene)如何处理 Field。也就是添加到索引中的xml文件属性中的类型,如inttextdate.

    <fieldType name="string" class="solr.StrField" sortMissingLast="true"/>

    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>

    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>

     

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">

    <analyzer type="index">

      <tokenizer class="solr.StandardTokenizerFactory"/>

      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />

      <filter class="solr.LowerCaseFilterFactory"/>

    </analyzer>

    <analyzer type="query">

      <tokenizer class="solr.StandardTokenizerFactory"/>

      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />

      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>

      <filter class="solr.LowerCaseFilterFactory"/>

    </analyzer>

    </fieldType>

    参数说明:

    属性

    描述

    name

    标识而已

    class

    和其他属性决定了这个fieldType的实际行为。

    sortMissingLast

    设置成true没有该field的数据排在有该field的数据之后,而不管请求时的排序规则, 默认是设置成false。

    sortMissingFirst

    跟上面倒过来呗。 默认是设置成false

    analyzer

    字段类型指定的分词器

    type

    当前分词用用于的操作.index代表生成索引时使用的分词器query代码在查询时使用的分词器

    tokenizer

    分词器类

    filter

    分词后应用的过滤器  过滤器调用顺序和配置相同.

    3.1.2  fileds

           是你添加到索引文件中出现的属性名称,而声明类型就需要用到上面的types

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>

    <field name="path" type="text_smartcn" indexed="false" stored="true" multiValued="false" termVector="true" />

    <field name="content" type="text_smartcn" indexed="false" stored="true" multiValued="false" termVector="true"/>

    <field name ="text" type ="text_ik" indexed ="true" stored ="false" multiValued ="true"/>

    <field name ="pinyin" type ="text_pinyin" indexed ="true" stored ="false" multiValued ="false"/>

    <field name="_version_" type="long" indexed="true" stored="true"/>

     

    <dynamicField name="*_i" type="int" indexed="true" stored="true"/>

    <dynamicField name="*_l" type="long" indexed="true" stored="true"/>

    <dynamicField name="*_s" type="string" indexed="true" stored="true" />

    field: 固定的字段设置dynamicField: 动态的字段设置,用于后期自定义字段,*号通配符.例如: test_i就是int类型的动态字段.

           还有一个特殊的字段copyField,一般用于检索时用的字段这样就只对这一个字段进行索引分词就行了copyFielddest字段如果有多个source一定要设置multiValued=true,否则会报错的

    <copyField source="content" dest="pinyin"/>

    <copyField source="content" dest="text"/>

    <copyField source="pinyin" dest="text"/>

    字段属性说明:

    属性

    描述

    name

    字段类型名

    class

    java类名

    indexed

    缺省true。 说明这个数据应被搜索和排序,如果数据没有indexed,则stored应是true。

    stored

    缺省true。说明这个字段被包含在搜索结果中是合适的。如果数据没有stored,则indexed应是true。

    omitNorms

    字段的长度不影响得分和在索引时不做boost时,设置它为true。

    一般文本字段不设置为true。

    termVectors

    如果字段被用来做more like this 和highlight的特性时应设置为true。

    compressed

    字段是压缩的。这可能导致索引和搜索变慢,但会减少存储空间,只有StrField和TextField是可以压缩,这通常适合字段的长度超过200个字符。

    multiValued

    字段多于一个值的时候,可设置为true。

    positionIncrementGap

    和multiValued一起使用,设置多个值之间的虚拟空白的数量

    注意:_version_是一个特殊字段,不能删除,是记录当前索引版本号的.

    3.1.3. 其他配置

    uniqueKey: 唯一键,这里配置的是上面出现的fileds,一般是idurl等不重复的。在更新、删除的时候可以用到。

    defaultSearchField:默认搜索属性,如q=solr就是默认的搜索那个字段

    solrQueryParser:查询转换模式,是并且还是或者(AND/OR必须大写)

    3.2、solr配置solrconfig.xml

          solrconfig.xml这个配置文件可以在你下载solr包的安装解压目录的D:\data\solr\collection1\conf中找到,这个配置文件内容有点多,主要内容有:使用的lib配置,包含依赖的jarSolr的一些插件;组件信息配置;索引配置和查询配置,下面详细说一下索引配置和查询配置.

    3.2.1索引indexConfig

           Solr 性能因素,来了解与各种更改相关的性能权衡。表 1 概括了可控制 Solr 索引处理的各种因素:

    属性

    描述

    useCompoundFile

    通过将很多 Lucene 内部文件整合到一个文件来减少使用中的文件的数量。这可有助于减少 Solr 使用的文件句柄数目,代价是降低了性能。除非是应用程序用完了文件句柄,否则 false 的默认值应该就已经足够。

    ramBufferSizeMB

    在添加或删除文档时,为了减少频繁的更些索引,Solr会选缓存在内存中,当内存中的文件大于设置的值,才会更新到索引库。较大的值可使索引时间变快但会牺牲较多的内存。如两个值同时设置,满足一个就会进行刷新索引.

    maxBufferedDocs

    mergeFactor

    决定低水平的 Lucene 段被合并的频率。较小的值(最小为 2)使用的内存较少但导致的索引时间也更慢。较大的值可使索引时间变快但会牺牲较多的内存。

    maxIndexingThreads

    indexWriter生成索引时使用的最大线程数

    unlockOnStartup

    unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制。在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新。将其设置为 true 可以禁用启动锁定,进而允许进行添加和更新。

    lockType

    single: 在只读索引或是没有其它进程修改索引时使用.

    native: 使用操作系统本地文件锁,不能使用多个Solr在同一个JVM中共享一个索引.

    simple :使用一个文本文件锁定索引.

    3.2.2 查询配置query

    属性

    描述

    maxBooleanClauses

    最大的BooleanQuery数量. 当值超出时,抛出 TooManyClausesException.注意这个是全局的,如果是多个SolrCore都会使用一个值,每个Core里设置不一样的化,会使用最后一个的.

    filterCache

    filterCache存储了无序的lucene document id集合,1.存储了filter queries(“fq”参数)得到的document id集合结果。2还可用于facet查询3. 3)如果配置了useFilterForSortedQuery,那么如果查询有filter,则使用filterCache。

    queryResultCache

    缓存搜索结果,一个文档ID列表

    documentCache

    缓存Lucene的Document对象,不会自热

    fieldValueCache

    字段缓存使用文档ID进行快速访问。默认情况下创建fieldValueCache即使这里没有配置。

    enableLazyFieldLoading

    若应用程序预期只会检索 Document 上少数几个 Field,那么可以将属性设置为 true。延迟加载的一个常见场景大都发生在应用程序返回和显示一系列搜索结果的时候,用户常常会单击其中的一个来查看存储在此索引中的原始文档。初始的显示常常只需要显示很短的一段信息。若考虑到检索大型 Document 的代价,除非必需,否则就应该避免加载整个文档。

    queryResultWindowSize

    一次查询中存储最多的doc的id数目.

    queryResultMaxDocsCached

    查询结果doc的最大缓存数量, 例如要求每页显示10条,这里设置是20条,也就是说缓存里总会给你多出10条的数据.让你点示下一页时很快拿到数据.

    listener

    选项定义 newSearcher 和 firstSearcher 事件,您可以使用这些事件来指定实例化新搜索程序或第一个搜索程序时应该执行哪些查询。如果应用程序期望请求某些特定的查询,那么在创建新搜索程序或第一个搜索程序时就应该反注释这些部分并执行适当的查询。

    useColdSearcher

    是否使用冷搜索,为false时使用自热后的searcher

    maxWarmingSearchers

    最大自热searcher数量

     

    4.添加IK分词器

    首选要去下载IKAnalyzer的发行包.下载地址http://ik-analyzer.googlecode.com/files/IK Analyzer 2012FF_hf1.zip.

    下载后解压出来文件中的三个复制到\solr\contrib\analysis-extras\lib目录中.

    IKAnalyzer2012FF_u1.jar      分词器jar

    IKAnalyzer.cfg.xml                分词器配置文件

    Stopword.dic                          分词器停词字典,可自定义添加内容

    复制后就可以进行配置scheme.xml.

    <fieldType name="text_ik" class="solr.TextField">

             <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

    </fieldType>

     

    <field name ="text" type ="text_ik" indexed ="true" stored ="false" multiValued ="true"/>

           现在来验证下是否添加成功,首先使用StartSolrJetty来启动solr服务,启动过程中如果配置出错,一般有两个原因:一是配置的分词器jar找不到,也就是你没有复制jar包到\solr\contrib\analysis-extras\lib目前下;二是分词器版本不对导致的分词器接口API不一样出的错,要是这个错的话就在检查分词器的相关文档,看一下支持的版本是否一样.

          如果在启动过程中没有报错的话说明配置成功了.我们可以进入到http://localhost:8983/solr地址进行测试一下刚加入的中文分词器.在首页的Core Selector中选择你配置的Croe后点击下面的Analysis,Analyse Fieldname / FieldType里选择你刚才设置的字段名称或是分词器类型,Field Value(index)中输入:中国人,点击右面的分词就行了.

    转载请注明原文地址: https://ju.6miu.com/read-678762.html

    最新回复(0)