• SOLR安装与配置


    apache-solr-3.2.0基于TOMCAT安装 以下是windows的安装方法,与linux安装是一样的

    修改tomcat的server.xml文件

    <Connector port=”8983″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ URIEncoding=”UTF-8″ />

    增加tomcat\conf\Catalina\localhost\solr.xml文件

    <?xml version=”1.0″ encoding=”utf-8″?>
    <Context docBase=”F:\root\apache-solr-3.2.0\dist\apache-solr-3.2.0.war” debug=”0″ crossContext=”true”>
    <Environment name=”solr/home” type=”java.lang.String” value=”F:\root\apache-solr-3.2.0\example\solr” override=”true”/>
    </Context>

    访问地址http://localhost:8983/solr/admin/即可进入SOLR的查询页面

    SOLR 中 Schema.xml 的filedType 的一些属性的理解

    1. dynamicField 的作用是什么?

    如果你需要在schema.xml文件中的<field> ......</field>部分定义多个<field>(math_score,chinese_score,english_score,....),而恰好这些<field>的type属性又相同(type="integer"),那么就可以借助 dynamicField 用一个句子完成

    这样,在一个document中,就可以使用math_score,chinese_score,english_score 这些字段名,虽然在schema.xml文件中并未对它们进行一一定义。

    dynamicField就是動態欄位, 要是你有太多欄位無法一一設定,你可以用dynamicField處理像下面這第一個dynamicField就是說, 所有欄位是以 _i做結尾的 (如 a_i, sss_i, id_i等等)都套用這個設定.

    <dynamicField name="*_i" type="integer" indexed="true" stored="true"/>
    <dynamicField name="*_t" type="text" indexed="true" stored="true"/>
    <dynamicField name="*_f" type="float" indexed="true" stored="true"/>
    <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
    <dynamicField name="*_d" type="date" indexed="true" stored="true"/>
    <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
    <dynamicField name="*_ri" type="sint" indexed="true" stored="true"/>
    <dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>
    <dynamicField name="*_facet" type="string" indexed="true" stored="true"/>
    </fields>

    2. sortMissingLast 和 sortMissingFirst对<field>的属性之一。只在对该<field>进行排序时,才起作用。


    sortMissingLast = true时,那些在该<field>上没有值的documents将被排在那些在该<field>上有值的documents之后。


    sortMissingFirst = true时的情况正好相反。


    如果两者都设为false,则使用Lucene的排序。

    3. positionIncrementGap=100 只对 multiValue = true 的fieldType有意义。

    http://svn.apache.org/repos/asf/ ... olr/conf/schema.xml

    Suppose a document has a multi-valued "author" field. Like this:

    author: John Doe
    author: Bob Smith

    With a position increment gap of 0, a phrase query of "doe bob" would
    be a match. But often it is undesirable for that kind of match across
    different field values. A position increment gap controls the virtual
    space between the last token of one field instance and the first token
    of the next instance. With a gap of 100, this prevents phrase queries
    (even with a modest slop factor) from matching across instances.

    4. omitNorms

    什么是Norm,现在还不懂????

    5. LowerCaseFilterFactory的作用。

    例如Kobe Bryant在分词后 kobe 不能搜索到结果 Kobe可以,虽然这个是中文分词
    法,但经常有中英混输的情况,如果在输入英文后,查不到结果,也是比较失望的,
    另外我看了你的源代码,建议在词库的引进上采用单例模式,在web应用上会比较好,
    谢谢你的帮助,另外我看了solol的mmseg的接口比较不错,你是否有意看看,另外再
    次感谢你的solr分词

    Comment 1 by chenlb2008, Aug 16, 2009 英文小写,好办,用 <filter class="solr.LowerCaseFilterFactory"/> 就行,详情请
    看:http://blog.chenlb.com/2009/04/s ... seg4j-use-demo.html

    solol 基本没看,我只是怕看了会影响我的设计思路。

    也准备实现 http://chenlb.javaeye.com/blog/439843 提到的一些功能。

    多谢你的关注。希望继续提出你的看法。

    以下内容是从网上找到的

    =====================

    Solr schema.xml 的介紹

    Tuesday, 1. April 2008, 07:23:25

    solr

    原來我是打算將Solr wiki裡的介紹直接翻譯成中文, 後來寫一寫覺得, 翻譯的內容太複雜, 很難懂. 所以在這裡我就直接拿一個schema.xml範例來介紹好了. 希望能幫助大家了解schema.xml

    <?xml version="1.0" ?>
    The Solr schema file. This file should be named "schema.xml" and should be in the conf directory under the solr home (i.e. ./solr/conf/schema.xml by default) or located where the classloader for the Solr webapp can find it.

    For more information, on how to customize this file, please see… wiki.apache.org/solr/SchemaXml
    <schema name="solr" version="1.1">

    資料型態, 你的資料可能要分很多不同型態做資料建置以便solr引擎做檢索, 就像一般資料庫一樣, 要對存入的資料做型態分類. 以下有string, boolean, integer, long, float, double 等等的資料型態, 就依你的須求做設定. 每一個fieldtype 都有幾個參數可設定, 其中name就是你給這個fieldtype的名子, 你可以隨你的方便取名. class是solr用的,就不可以亂取, 要針對你這個fieldtype的資料型態來告訴solr這個fieldtype裡的資料是什麼樣類型的資料,如 integer, text, string, long等等.
    後面的sortMissingLast, omitNorms等設定你可以參考solr wiki schemalXml的介紹, 再依你的須求使用. 請參考下列範例.

    <types>
    <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
    <fieldtype name="integer" class="solr.IntField" omitNorms="true"/>
    <fieldtype name="long" class="solr.LongField" omitNorms="true"/>
    <fieldtype name="float" class="solr.FloatField" omitNorms="true"/>
    <fieldtype name="double" class="solr.DoubleField" omitNorms="true"/>
    <fieldtype name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
    <fieldtype name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
    <fieldtype name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
    <fieldtype name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
    <fieldtype name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>

    如果是TextField的資料型態, 你可以用不同的Analyzer, Tokenizer, Filter對這個fieldtype的資料做處理. 像是中文切詞, 刪除前後空白, 或同義詞等等. 可依你的須求使用. 請參考下列範例.

    <fieldtype name="text_ws" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    </analyzer>
    </fieldtype>

    <fieldtype name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>

    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    <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"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    </fieldtype>

    <fieldtype name="textTight" class="solr.TextField" positionIncrementGap="100" >
    <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.EnglishPorterFilterFactory" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    </fieldtype>
    </types>


    設置好資料fieldType的型態後, 就是將這些fieldType套入對應的document fields. 只能多不能少. 也就是說假設你有一個document裡有 id, name, default等資料, 你的schema.xml不可以只有id, default這兩個field. 你一定要還要有name這個field. 但是你schema.xml裡若有id, name, defualt, text這四個欄位, 你的document卻可以只有id, default這兩個欄位.

    <fields>
    <field name="id" type="string" indexed="true" stored="true"/>

    上面這個欄位(field)是給你document裡的id欄用, 型態為string, 要index, 也要儲存在你的資料庫裡

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

    dynamicField就是動態欄位, 要是你有太多欄位無法一一設定,你可以用dynamicField處理像下面這第一個dynamicField就是說, 所有欄位是以 _i做結尾的 (如 a_i, sss_i, id_i等等)都套用這個設定.

    <dynamicField name="*_i" type="integer" indexed="true" stored="true"/>
    <dynamicField name="*_t" type="text" indexed="true" stored="true"/>
    <dynamicField name="*_f" type="float" indexed="true" stored="true"/>
    <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
    <dynamicField name="*_d" type="date" indexed="true" stored="true"/>
    <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
    <dynamicField name="*_ri" type="sint" indexed="true" stored="true"/>
    <dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>
    <dynamicField name="*_facet" type="string" indexed="true" stored="true"/>
    </fields>

    uniqueKey就像一般database的primary key一樣, 也就是說整個資料庫裡的每一筆資料的id欄位不可以與另一筆資料的id欄位有相同值.

    <uniqueKey>id</uniqueKey>

    defaultSearchField就是你在做query搜尋時若不指定特定欄位做檢索時, Solr就會只查這個欄位.

    <defaultSearchField>default</defaultSearchField>

    copyField是用來複製你一個欄位裡的值到另一欄位用. 如你可以將name裡的東西copy到default裡, 這樣solr做檢索時也會檢索到name裡的東西.

    <copyField source="name" dest="default"/>


    這裡defaultOperator設為 "AND", 就是說當你輸入的查尋詞句有空白時 ex. "遠東 餐廳", Solr搜尋解析器會當做你的query指令為"遠東AND餐廳". 若是設為 "OR" 就會變成"遠東OR餐廳".

    <solrQueryParser defaultOperator="AND"/>
    </schema>

    這就是一個簡單的schema.xml介紹

    SOLR安装路径
    /home/download/apache-solr-3.2.0
    开源PHP_SOLR类路径
    /mnt/webroot/SolrPhpClient
    TOMCAT安装路径
    /usr/local/apache-tomcat-6.0.32

    启动TOMCAT
    /usr/local/apache-tomcat-6.0.32/bin/startup.sh
    停止TOMCAT
    /usr/local/apache-tomcat-6.0.32/bin/shutdown.sh

  • 相关阅读:
    最新美丽说网购平台模板
    红色的原油投资金融专题模板
    简单响应式Bootstrap框架中文官网页面模板
    蓝色简约的工业大学学校网站静态模板
    红色经典招生校园网站全套
    白色简洁的瑞班克个人博客网站
    仿360影视网站模板html
    红色的企业新闻门户网站模板
    橙色的汽车蚂蚁企业门户网站模板
    使用ExtJS做一个用户的增删改查
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/2090140.html
Copyright © 2020-2023  润新知