• solrj使用demo


     solr服务器类PersonSolrServer.java:

    import java.net.MalformedURLException;  
    import java.util.ArrayList;
    import java.util.List;

    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
    import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.SolrDocument;
    import org.apache.solr.common.SolrInputDocument;
    import org.nstcrm.person.model.PersonDetail;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**
    *
    @author Sam 时间:2011-9-16 下午3:25:15
    */
    public class PersonSolrServer {

    private final static String URL = "http://localhost/solr/person";
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    private final static Integer SOCKE_TTIMEOUT = 1000; // socket read timeout
    private final static Integer CONN_TIMEOUT = 100;
    private final static Integer MAXCONN_DEFAULT = 100;
    private final static Integer MAXCONN_TOTAL = 100;
    private final static Integer MAXRETRIES = 1;
    private CommonsHttpSolrServer server = null;
    private final static String ASC = "asc";

    public PersonSolrServer() throws MalformedURLException {
    System.out.println("初始化solr服务..");
    server = new CommonsHttpSolrServer( URL );//使用HTTPClient 和solr服务器进行通信
    server.setRequestWriter(new BinaryRequestWriter());//使用流输出方式
    server.setSoTimeout(SOCKE_TTIMEOUT);// socket read timeout
    server.setConnectionTimeout(CONN_TIMEOUT);
    server.setDefaultMaxConnectionsPerHost(MAXCONN_DEFAULT);
    server.setMaxTotalConnections(MAXCONN_TOTAL);
    server.setFollowRedirects(false);
    server.setAllowCompression(true);
    server.setMaxRetries(MAXRETRIES); // defaults to 0. > 1 not recommended.
    }

    /**
    * 创建索引
    */
    public void createIndex(PersonDetail pd) throws Exception {
    SolrInputDocument doc = new SolrInputDocument();
    doc.addField("id", pd.getId());
    doc.addField("language", pd.getLanguage());

    server.add(doc);
    server.optimize();
    server.commit();
    System.out.println("----索引创建完毕!!!");
    }
    /**
    * 删除索引
    *
    @author Sam 时间:2011-9-16 下午3:32:55
    *
    @throws Exception
    */
    public void delIndex() throws Exception {
    server.deleteByQuery("*:*");
    server.commit();
    System.out.println("----索引清除完毕!!!");
    }

    /**
    * 查询
    *
    @author Sam 时间:2011-9-16 下午3:33:14
    *
    @param key
    *
    @param startPage
    *
    @param pageSize
    *
    @throws Exception
    */
    public List<Integer> queryList(String key, Integer start, Integer rows) throws Exception {
    SolrQuery query = new SolrQuery(getkey(key));
    query.setHighlight(true); //开启高亮组件
    query.addHighlightField("id");
    query.addHighlightField("chName");//高亮字段
    query.addHighlightField("enName");
    query.setHighlightSimplePre("<font color='red'>");//前缀
    query.setHighlightSimplePost("</font>");//后缀
    query.set("hl.usePhraseHighlighter", true);
    query.set("hl.highlightMultiTerm", true);
    query.set("hl.snippets", 3);//三个片段,默认是1
    query.set("hl.fragsize", 50);//每个片段50个字,默认是100
    query.setStart(start); //起始位置 …分页
    query.setRows(rows);//文档数

    QueryResponse rep = server.query(query);
    List<SolrDocument> docs = rep.getResults();//得到结果集
    List<Integer> idList = new ArrayList<Integer>();
    for(SolrDocument doc : docs) {
    idList.add(Integer.parseInt((String) doc.getFieldValue("id")));
    System.out.println(doc.getFieldValue("chName") + "|" + doc.getFieldValue("enName"));
    }
    return idList;
    }

    public String getkey(String strWord) {
    if(strWord.indexOf(" ") > 0 ){
    String wordAnd = strWord.replace(" ", "* AND *");
    String wordOr = strWord.replace(" ", "* *");
    String rt = "(*" + wordAnd + "*) *" + wordOr + "* " + strWord;
    return rt;
    } else {
    return "*" + strWord + "* " + strWord;
    }

    }

    public CommonsHttpSolrServer getServer() {
    return server;
    }

    public void setServer(CommonsHttpSolrServer server) {
    this.server = server;
    }

    }

    配置文件E:\SolrHome\solr\person\conf\data-config.xml:

    <dataConfig>   
    <dataSource
    type="JdbcDataSource"
    driver
    ="com.mysql.jdbc.Driver"
    url
    ="jdbc:mysql://localhost:3306/nstcrm"
    user
    ="root"
    password
    ="admin"/>
    <document name="pm_person">
    <entity name="person" pk="id" query="select * from pm_person">
    <field column="id" name="id"/>
    <field column="code" name="code"/>
    <field column="chName" name="chName"/>
    <field column="enName" name="enName"/>
    <field column="nickName" name="nickName"/>
    <field column="birthdate" name="birthdate"/>
    <field column="height" name="height"/>
    <field column="email" name="email"/>
    <field column="mobile" name="mobile"/>
    <field column="workPhone" name="workPhone"/>
    <field column="homePhone" name="homePhone"/>
    <field column="address" name="address"/>
    <field column="postal" name="postal"/>
    <field column="idNumber" name="idNumber"/>
    <entity name="workProv" query="select chName,enName from sm_province where id='${person.workProv}'">
    <field column="chName" name="workProvchName"/>
    <field column="enName" name="workProvenName"/>
    </entity>
    <entity name="workCity" query="select chName,enName from sm_city where id='${person.workCity}'">
    <field column="chName" name="workCitychName"/>
    <field column="enName" name="workCityenName"/>
    </entity>
    <entity name="houseProv" query="select chName,enName from sm_province where id='${person.houseProv}'">
    <field column="chName" name="houseProvchName"/>
    <field column="enName" name="houseProvenName"/>
    </entity>
    <entity name="houseCity" query="select chName,enName from sm_city where id='${person.houseCity}'">
    <field column="chName" name="houseCitychName"/>
    <field column="enName" name="houseCityenName"/>
    </entity>
    <entity name="origProv" query="select chName,enName from sm_province where id='${person.origProv}'">
    <field column="chName" name="origProvchName"/>
    <field column="enName" name="origProvenName"/>
    </entity>
    <entity name="origCity" query="select chName,enName from sm_city where id='${person.origCity}'">
    <field column="chName" name="origCitychName"/>
    <field column="enName" name="origCityenName"/>
    </entity>
    <field column="experience" name="experience"/>
    <entity name="compId" query="select chFname,enFname from cm_company where id='${person.compId}'">
    <field column="chFname" name="compIdchFname"/>
    <field column="enFname" name="compIdenFname"/>
    </entity>
    <entity name="industry" query="select chName,enName from sm_industry where id='${person.industry}'">
    <field column="chName" name="industrychName"/>
    <field column="enName" name="industryenName"/>
    </entity>
    <entity name="post" query="select chName,enName from sm_post where id='${person.post}'">
    <field column="chName" name="postchName"/>
    <field column="enName" name="postenName"/>
    </entity>
    <entity name="subPost" query="select chName,enName from sm_subpost where id='${person.subPost}'">
    <field column="chName" name="subPostchName"/>
    <field column="enName" name="subPostenName"/>
    </entity>
    <field column="postRemark" name="postRemark"/>
    <field column="departRemark" name="departRemark"/>
    <field column="salaryMonth" name="salaryMonth"/>
    <field column="salaryOfYear" name="salaryOfYear"/>
    <field column="salaryOfMonth" name="salaryOfMonth"/>
    <field column="bonus" name="bonus"/>
    <field column="allowance" name="allowance"/>
    <field column="stock" name="stock"/>
    <field column="salaryRemark" name="salaryRemark"/>
    <field column="expectLocation" name="expectLocation"/>
    <field column="expectIndustry" name="expectIndustry"/>
    <field column="expectPost" name="expectPost"/>
    <field column="selfAssessment" name="selfAssessment"/>
    <field column="completion" name="completion"/>
    <field column="addressEn" name="addressEn"/>
    <field column="departRemarkEn" name="departRemarkEn"/>
    <field column="postRemarkEn" name="postRemarkEn"/>
    <field column="salaryRemarkEn" name="salaryRemarkEn"/>
    <field column="language" name="language"/>
    <field column="selfAssessmentEn" name="selfAssessmentEn"/>
    <field column="overseaLocation" name="overseaLocation"/>
    </entity>
    </document>
    </dataConfig>

    配置文件E:\SolrHome\solr\person\conf\schema.xml:

    view plain

    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2.     
    3. <schema name="example" version="1.4">  
    4.       
    5.   <types>  
    6.        
    7.     <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->  
    8.     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>  
    9.     
    10.     <!-- boolean type: "true" or "false" -->  
    11.     <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>  
    12.     <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->  
    13.     <fieldtype name="binary" class="solr.BinaryField"/>  
    14.     
    15.     <!-- 
    16.       Default numeric field types. For faster range queries, consider the tint/tfloat/tlong/tdouble types. 
    17.     -->  
    18.     <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>  
    19.     <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>  
    20.     <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>  
    21.     <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>  
    22.     
    23.        
    24.     <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>  
    25.     <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>  
    26.     <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>  
    27.     <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>  
    28.     
    29.        
    30.     <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/>  
    31.     
    32.     <!-- A Trie based date field for faster date range queries and date faceting. -->  
    33.     <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>  
    34.     
    35.     
    36.     <fieldType name="pint" class="solr.IntField" omitNorms="true"/>  
    37.     <fieldType name="plong" class="solr.LongField" omitNorms="true"/>  
    38.     <fieldType name="pfloat" class="solr.FloatField" omitNorms="true"/>  
    39.     <fieldType name="pdouble" class="solr.DoubleField" omitNorms="true"/>  
    40.     <fieldType name="pdate" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>  
    41.     
    42.     
    43.     <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>  
    44.     <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>  
    45.     <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>  
    46.     <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>  
    47.     
    48.     <fieldType name="random" class="solr.RandomSortField" indexed="true" />  
    49.     
    50.     <!-- A text field that only splits on whitespace for exact matching of words -->  
    51.     <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">  
    52.       <analyzer>  
    53.         <tokenizer class="solr.WhitespaceTokenizerFactory"/>  
    54.       </analyzer>  
    55.     </fieldType>  
    56.     
    57.     <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">  
    58.       <analyzer type="index">  
    59.         <tokenizer class="solr.StandardTokenizerFactory"/>  
    60.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
    61.         <!-- in this example, we will only use synonyms at query time  
    62.         <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>  
    63.         -->  
    64.         <filter class="solr.LowerCaseFilterFactory"/>  
    65.       </analyzer>  
    66.       <analyzer type="query">  
    67.         <tokenizer class="solr.StandardTokenizerFactory"/>  
    68.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
    69.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
    70.         <filter class="solr.LowerCaseFilterFactory"/>  
    71.       </analyzer>  
    72.     </fieldType>  
    73.     
    74.     <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">  
    75.       <analyzer type="index">  
    76.         <tokenizer class="solr.StandardTokenizerFactory"/>  
    77.            
    78.         <filter class="solr.StopFilterFactory"  
    79.                 ignoreCase="true"  
    80.                 words="stopwords_en.txt"  
    81.                 enablePositionIncrements="true"  
    82.                 />  
    83.         <filter class="solr.LowerCaseFilterFactory"/>  
    84.     <filter class="solr.EnglishPossessiveFilterFactory"/>  
    85.         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>  
    86.     <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:  
    87.         <filter class="solr.EnglishMinimalStemFilterFactory"/>  
    88.     -->  
    89.         <filter class="solr.PorterStemFilterFactory"/>  
    90.       </analyzer>  
    91.       <analyzer type="query">  
    92.         <tokenizer class="solr.StandardTokenizerFactory"/>  
    93.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
    94.         <filter class="solr.StopFilterFactory"  
    95.                 ignoreCase="true"  
    96.                 words="stopwords_en.txt"  
    97.                 enablePositionIncrements="true"  
    98.                 />  
    99.         <filter class="solr.LowerCaseFilterFactory"/>  
    100.     <filter class="solr.EnglishPossessiveFilterFactory"/>  
    101.         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>  
    102.     <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:  
    103.         <filter class="solr.EnglishMinimalStemFilterFactory"/>  
    104.     -->  
    105.         <filter class="solr.PorterStemFilterFactory"/>  
    106.       </analyzer>  
    107.     </fieldType>  
    108.     
    109.     <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">  
    110.       <analyzer type="index">  
    111.         <tokenizer class="solr.WhitespaceTokenizerFactory"/>  
    112.            
    113.         <filter class="solr.StopFilterFactory"  
    114.                 ignoreCase="true"  
    115.                 words="stopwords_en.txt"  
    116.                 enablePositionIncrements="true"  
    117.                 />  
    118.         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>  
    119.         <filter class="solr.LowerCaseFilterFactory"/>  
    120.         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>  
    121.         <filter class="solr.PorterStemFilterFactory"/>  
    122.       </analyzer>  
    123.       <analyzer type="query">  
    124.         <tokenizer class="solr.WhitespaceTokenizerFactory"/>  
    125.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
    126.         <filter class="solr.StopFilterFactory"  
    127.                 ignoreCase="true"  
    128.                 words="stopwords_en.txt"  
    129.                 enablePositionIncrements="true"  
    130.                 />  
    131.         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>  
    132.         <filter class="solr.LowerCaseFilterFactory"/>  
    133.         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>  
    134.         <filter class="solr.PorterStemFilterFactory"/>  
    135.       </analyzer>  
    136.     </fieldType>  
    137.     
    138.     <!-- Less flexible matching, but less false matches.  Probably not ideal for product names,  
    139.          but may be good for SKUs.  Can insert dashes in the wrong place and still match. -->  
    140.     <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">  
    141.       <analyzer>  
    142.         <tokenizer class="solr.WhitespaceTokenizerFactory"/>  
    143.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>  
    144.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt"/>  
    145.         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>  
    146.         <filter class="solr.LowerCaseFilterFactory"/>  
    147.         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>  
    148.         <filter class="solr.EnglishMinimalStemFilterFactory"/>  
    149.         <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes  
    150.              possible with WordDelimiterFilter in conjuncton with stemming. -->  
    151.         <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>  
    152.       </analyzer>  
    153.     </fieldType>  
    154.     
    155.     <!-- Just like text_general except it reverses the characters of  
    156.      each token, to enable more efficient leading wildcard queries. -->  
    157.     <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">  
    158.       <analyzer type="index">  
    159.         <tokenizer class="solr.StandardTokenizerFactory"/>  
    160.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
    161.         <filter class="solr.LowerCaseFilterFactory"/>  
    162.         <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"  
    163.            maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>  
    164.       </analyzer>  
    165.       <analyzer type="query">  
    166.         <tokenizer class="solr.StandardTokenizerFactory"/>  
    167.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
    168.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
    169.         <filter class="solr.LowerCaseFilterFactory"/>  
    170.       </analyzer>  
    171.     </fieldType>  
    172.     
    173.        
    174.     <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">  
    175.       <analyzer>  
    176.         <!-- KeywordTokenizer does no actual tokenizing, so the entire  
    177.              input string is preserved as a single token  
    178.           -->  
    179.         <tokenizer class="solr.KeywordTokenizerFactory"/>  
    180.         <!-- The LowerCase TokenFilter does what you expect, which can be  
    181.              when you want your sorting to be case insensitive  
    182.           -->  
    183.         <filter class="solr.LowerCaseFilterFactory" />  
    184.         <!-- The TrimFilter removes any leading or trailing whitespace -->  
    185.         <filter class="solr.TrimFilterFactory" />  
    186.            
    187.         <filter class="solr.PatternReplaceFilterFactory"  
    188.                 pattern="([^a-z])" replacement="" replace="all"  
    189.         />  
    190.       </analyzer>  
    191.     </fieldType>  
    192.         
    193.     <fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" >  
    194.       <analyzer>  
    195.         <tokenizer class="solr.StandardTokenizerFactory"/>  
    196.         <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>  
    197.       </analyzer>  
    198.     </fieldtype>  
    199.     
    200.     <fieldtype name="payloads" stored="false" indexed="true" class="solr.TextField" >  
    201.       <analyzer>  
    202.         <tokenizer class="solr.WhitespaceTokenizerFactory"/>  
    203.            
    204.         <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>  
    205.       </analyzer>  
    206.     </fieldtype>  
    207.     
    208.     <!-- lowercases the entire field value, keeping it as a single token.  -->  
    209.     <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">  
    210.       <analyzer>  
    211.         <tokenizer class="solr.KeywordTokenizerFactory"/>  
    212.         <filter class="solr.LowerCaseFilterFactory" />  
    213.       </analyzer>  
    214.     </fieldType>  
    215.     
    216.     <fieldType name="text_path" class="solr.TextField" positionIncrementGap="100">  
    217.       <analyzer>  
    218.         <tokenizer class="solr.PathHierarchyTokenizerFactory"/>  
    219.       </analyzer>  
    220.     </fieldType>  
    221.         
    222.     <fieldType name="textik" class="solr.TextField" >  
    223.        <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>    
    224.     
    225.        <analyzer type="index">    
    226.            <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>    
    227.            <filter class="solr.StopFilterFactory"    
    228.                    ignoreCase="true" words="stopwords.txt"/>    
    229.            <filter class="solr.WordDelimiterFilterFactory"    
    230.                    generateWordParts="1"    
    231.                    generateNumberParts="1"    
    232.                    catenateWords="1"    
    233.                    catenateNumbers="1"    
    234.                    catenateAll="0"    
    235.                    splitOnCaseChange="1"/>    
    236.            <filter class="solr.LowerCaseFilterFactory"/>    
    237.            <filter class="solr.EnglishPorterFilterFactory"    
    238.                protected="protwords.txt"/>    
    239.            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>    
    240.        </analyzer>    
    241.         <analyzer type="query">    
    242.            <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>    
    243.            <filter class="solr.StopFilterFactory"    
    244.                    ignoreCase="true" words="stopwords.txt"/>    
    245.            <filter class="solr.WordDelimiterFilterFactory"    
    246.                    generateWordParts="1"    
    247.                    generateNumberParts="1"    
    248.                    catenateWords="1"    
    249.                    catenateNumbers="1"    
    250.                    catenateAll="0"    
    251.                    splitOnCaseChange="1"/>    
    252.            <filter class="solr.LowerCaseFilterFactory"/>    
    253.            <filter class="solr.EnglishPorterFilterFactory"    
    254.                protected="protwords.txt"/>    
    255.            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>    
    256.        </analyzer>           
    257.     </fieldType>  
    258.         
    259.     <!-- since fields of this type are by default not stored or indexed,  
    260.          any data added to them will be ignored outright.  -->   
    261.     <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />  
    262.     
    263.     <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>  
    264.     
    265.     <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->  
    266.     <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>  
    267.     
    268.    <!--  
    269.     A Geohash is a compact representation of a latitude longitude pair in a single field.  
    270.     See http://wiki.apache.org/solr/SpatialSearch  
    271.    -->  
    272.     <fieldtype name="geohash" class="solr.GeoHashField"/>  
    273.  </types>  
    274.     
    275.     
    276.  <fields>  
    277.     
    278.     <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>  
    279.      <field name="code" type="string" indexed="true" stored="true" multiValued="false" />   
    280.      <field name="chName" type="string" indexed="true" stored="true" multiValued="false" />   
    281.      <field name="enName" type="string" indexed="true" stored="true" multiValued="false" />   
    282.      <field name="nickName" type="string" indexed="true" stored="true" multiValued="false" />  
    283.      <field name="birthdate" type="date" indexed="true" stored="true" multiValued="false" />   
    284.      <field name="height" type="tfloat" indexed="true" stored="true" multiValued="false" />   
    285.      <field name="email" type="string" indexed="true" stored="true" multiValued="false" />   
    286.      <field name="mobile" type="string" indexed="true" stored="true" multiValued="false" />   
    287.      <field name="workPhone" type="string" indexed="true" stored="true" multiValued="false" />   
    288.      <field name="homePhone" type="string" indexed="true" stored="true" multiValued="false" />   
    289.      <field name="address" type="string" indexed="true" stored="true" multiValued="false" />  
    290.     <field name="postal" type="string" indexed="true" stored="true" multiValued="false"/>  
    291.      <field name="idNumber" type="string" indexed="true" stored="true" multiValued="false" />   
    292.      <field name="workProvchName" type="string" indexed="true" stored="true" multiValued="false" />   
    293.      <field name="workProvenName" type="string" indexed="true" stored="true" multiValued="false" />   
    294.      <field name="workCitychName" type="string" indexed="true" stored="true" multiValued="false" />  
    295.      <field name="workCityenName" type="string" indexed="true" stored="true" multiValued="false" />   
    296.      <field name="houseProvchName" type="string" indexed="true" stored="true" multiValued="false" />   
    297.      <field name="houseProvenName" type="string" indexed="true" stored="true" multiValued="false" />   
    298.      <field name="houseCitychName" type="string" indexed="true" stored="true" multiValued="false" />   
    299.      <field name="houseCityenName" type="string" indexed="true" stored="true" multiValued="false" />   
    300.      <field name="origProvchName" type="string" indexed="true" stored="true" multiValued="false" />   
    301.      <field name="origProvenName" type="string" indexed="true" stored="true" multiValued="false" />   
    302.     <field name="origCitychName" type="string" indexed="true" stored="true" multiValued="false"/>  
    303.      <field name="origCityenName" type="string" indexed="true" stored="true" multiValued="false" />  
    304.     <field name="experience" type="string" indexed="true" stored="true" multiValued="false" />       
    305.      <field name="compIdchFname" type="string" indexed="true" stored="true" multiValued="false" />   
    306.      <field name="compIdenFname" type="string" indexed="true" stored="true" multiValued="false" />   
    307.      <field name="industrychName" type="string" indexed="true" stored="true" multiValued="false" />  
    308.      <field name="industryenName" type="string" indexed="true" stored="true" multiValued="false" />   
    309.      <field name="postchName" type="string" indexed="true" stored="true" multiValued="false" />   
    310.      <field name="postenName" type="string" indexed="true" stored="true" multiValued="false" />   
    311.      <field name="subPostchName" type="string" indexed="true" stored="true" multiValued="false" />   
    312.      <field name="subPostenName" type="string" indexed="true" stored="true" multiValued="false" />   
    313.      <field name="postRemark" type="string" indexed="true" stored="true" multiValued="false" />  
    314.     <field name="departRemark" type="string" indexed="true" stored="true" multiValued="false" />   
    315.      <field name="salaryMonth" type="string" indexed="true" stored="true" multiValued="false" />   
    316.     <field name="salaryOfYear" type="string" indexed="true" stored="true" multiValued="false"/>  
    317.      <field name="salaryOfMonth" type="string" indexed="true" stored="true" multiValued="false" />   
    318.      <field name="bonus" type="string" indexed="true" stored="true" multiValued="false" />   
    319.      <field name="allowance" type="string" indexed="true" stored="true" multiValued="false" />   
    320.      <field name="stock" type="string" indexed="true" stored="true" multiValued="false" />  
    321.      <field name="salaryRemark" type="string" indexed="true" stored="true" multiValued="false" />   
    322.      <field name="expectLocation" type="string" indexed="true" stored="true" multiValued="false" />   
    323.      <field name="expectIndustry" type="string" indexed="true" stored="true" multiValued="false" />   
    324.      <field name="expectPost" type="string" indexed="true" stored="true" multiValued="false" />   
    325.      <field name="selfAssessment" type="string" indexed="true" stored="true" multiValued="false" />   
    326.      <field name="completion" type="string" indexed="true" stored="true" multiValued="false" />   
    327.      <field name="addressEn" type="string" indexed="true" stored="true" multiValued="false" />   
    328.     <field name="departRemarkEn" type="string" indexed="true" stored="true" multiValued="false" />   
    329.      <field name="postRemarkEn" type="string" indexed="true" stored="true" multiValued="false" />   
    330.      <field name="salaryRemarkEn" type="string" indexed="true" stored="true" multiValued="false" />   
    331.      <field name="language" type="string" indexed="true" stored="true" multiValued="false" />   
    332.      <field name="selfAssessmentEn" type="string" indexed="true" stored="true" multiValued="false" />   
    333.      <field name="overseaLocation" type="string" indexed="true" stored="true" multiValued="false" />     
    334.     
    335.     <field name="persondetail" type="textik" indexed="true" stored="false" multiValued="true" />  
    336.     <copyField source="code" dest="persondetail" />  
    337.     <copyField source="chName" dest="persondetail" />  
    338.     <copyField source="enName" dest="persondetail" />  
    339.     <copyField source="nickName" dest="persondetail" />  
    340.     <copyField source="birthdate" dest="persondetail" />  
    341.     <copyField source="height" dest="persondetail" />  
    342.     <copyField source="email" dest="persondetail" />  
    343.     <copyField source="mobile" dest="persondetail" />  
    344.     <copyField source="workPhone" dest="persondetail" />  
    345.     <copyField source="homePhone" dest="persondetail" />  
    346.     <copyField source="address" dest="persondetail" />  
    347.     <copyField source="postal" dest="persondetail" />  
    348.     <copyField source="idNumber" dest="persondetail" />  
    349.     <copyField source="workProvchName" dest="persondetail" />  
    350.     <copyField source="workProvenName" dest="persondetail" />  
    351.     <copyField source="workCitychName" dest="persondetail" />  
    352.     <copyField source="workCityenName" dest="persondetail" />  
    353.     <copyField source="houseProvchName" dest="persondetail" />  
    354.     <copyField source="houseProvenName" dest="persondetail" />  
    355.     <copyField source="houseCitychName" dest="persondetail" />  
    356.     <copyField source="houseCityenName" dest="persondetail" />  
    357.     <copyField source="origProvchName" dest="persondetail" />  
    358.     <copyField source="origProvenName" dest="persondetail" />  
    359.     <copyField source="origCitychName" dest="persondetail" />  
    360.     <copyField source="origCityenName" dest="persondetail" />  
    361.     <copyField source="experience" dest="persondetail" />  
    362.     <copyField source="compIdchFname" dest="persondetail" />  
    363.     <copyField source="compIdenFname" dest="persondetail" />  
    364.     <copyField source="industrychName" dest="persondetail" />  
    365.     <copyField source="industryenName" dest="persondetail" />  
    366.     <copyField source="postchName" dest="persondetail" />  
    367.     <copyField source="postenName" dest="persondetail" />  
    368.     <copyField source="subPostchName" dest="persondetail" />  
    369.     <copyField source="subPostenName" dest="persondetail" />  
    370.     <copyField source="postRemark" dest="persondetail" />  
    371.     <copyField source="departRemark" dest="persondetail" />  
    372.     <copyField source="salaryMonth" dest="persondetail" />  
    373.     <copyField source="salaryOfYear" dest="persondetail" />  
    374.     <copyField source="salaryOfMonth" dest="persondetail" />  
    375.     <copyField source="bonus" dest="persondetail" />  
    376.     <copyField source="allowance" dest="persondetail" />  
    377.     <copyField source="stock" dest="persondetail" />  
    378.     <copyField source="salaryRemark" dest="persondetail" />  
    379.     <copyField source="expectLocation" dest="persondetail" />  
    380.     <copyField source="expectIndustry" dest="persondetail" />  
    381.     <copyField source="expectPost" dest="persondetail" />  
    382.     <copyField source="selfAssessment" dest="persondetail" />  
    383.     <copyField source="completion" dest="persondetail" />  
    384.     <copyField source="addressEn" dest="persondetail" />  
    385.     <copyField source="departRemarkEn" dest="persondetail" />  
    386.     <copyField source="postRemarkEn" dest="persondetail" />  
    387.     <copyField source="salaryRemarkEn" dest="persondetail" />  
    388.     <copyField source="language" dest="persondetail" />  
    389.     <copyField source="selfAssessmentEn" dest="persondetail" />  
    390.     <copyField source="overseaLocation" dest="persondetail" />  
    391.         
    392.  </fields>  
    393.      
    394.  <uniqueKey>id</uniqueKey>  
    395.     
    396.  <!-- field for the QueryParser to use when an explicit fieldname is absent -->  
    397.  <defaultSearchField>persondetail</defaultSearchField>  
    398.     
    399.  <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->  
    400.  <solrQueryParser defaultOperator="OR"/>  
    401. </schema>  

    配置文件E:\SolrHome\solr\person\conf\solrconfig.xml:

    view plain

    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <config>  
    3.       
    4.   <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>  
    5.       
    6.   <luceneMatchVersion>LUCENE_33</luceneMatchVersion>  
    7.     
    8.   <lib dir="http://www.cnblogs.com/contrib/extraction/lib" />  
    9.       
    10.   <lib dir="http://www.cnblogs.com/dist/" regex="apache-solr-cell-\d.*\.jar" />  
    11.   <lib dir="http://www.cnblogs.com/dist/" regex="apache-solr-clustering-\d.*\.jar" />  
    12.   <lib dir="http://www.cnblogs.com/dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />  
    13.     
    14.   <!-- If a dir option (with or without a regex) is used and nothing  
    15.        is found that matches, it will be ignored  
    16.        <dataDir>${solr.data.dir:solr/home/person/data}</dataDir>  
    17.     -->  
    18.   <lib dir="http://www.cnblogs.com/contrib/clustering/lib/" />  
    19.   <lib dir="/total/crap/dir/ignored" />   
    20.       
    21.   <dataDir>E:/SolrHome/solr/person/data</dataDir>  
    22.     
    23.   <directoryFactory name="DirectoryFactory"   
    24.                     class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>  
    25.     
    26.     
    27.   <indexDefaults>  
    28.     
    29.     <useCompoundFile>false</useCompoundFile>  
    30.     
    31.     <mergeFactor>10</mergeFactor>  
    32.         
    33.     <ramBufferSizeMB>32</ramBufferSizeMB>  
    34.        
    35.     <maxFieldLength>10000</maxFieldLength>  
    36.     <writeLockTimeout>1000</writeLockTimeout>  
    37.     <commitLockTimeout>10000</commitLockTimeout>  
    38.     
    39.     <lockType>native</lockType>  
    40.     
    41.   </indexDefaults>  
    42.     
    43.      
    44.   <mainIndex>  
    45.     
    46.     <useCompoundFile>false</useCompoundFile>  
    47.     <ramBufferSizeMB>32</ramBufferSizeMB>  
    48.     <mergeFactor>10</mergeFactor>  
    49.     
    50.     <unlockOnStartup>false</unlockOnStartup>  
    51.         
    52.     <!-- If true, IndexReaders will be reopened (often more efficient)  
    53.          instead of closed and then opened.  
    54.       -->  
    55.     <reopenReaders>true</reopenReaders>  
    56.     
    57.     <deletionPolicy class="solr.SolrDeletionPolicy">  
    58.       <!-- The number of commit points to be kept -->  
    59.       <str name="maxCommitsToKeep">1</str>  
    60.       <!-- The number of optimized commit points to be kept -->  
    61.       <str name="maxOptimizedCommitsToKeep">0</str>  
    62.          
    63.     </deletionPolicy>  
    64.     
    65.      <infoStream file="INFOSTREAM.txt">false</infoStream>   
    66.     
    67.   </mainIndex>  
    68.     
    69.      
    70.   <jmx />  
    71.      
    72.   <updateHandler class="solr.DirectUpdateHandler2"></updateHandler>  
    73.       
    74.    <query>  
    75.        
    76.     <maxBooleanClauses>1024</maxBooleanClauses>  
    77.     
    78.     
    79.     <filterCache class="solr.FastLRUCache"  
    80.                  size="512"  
    81.                  initialSize="512"  
    82.                  autowarmCount="0"/>  
    83.     
    84.     <queryResultCache class="solr.LRUCache"  
    85.                      size="512"  
    86.                      initialSize="512"  
    87.                      autowarmCount="0"/>  
    88.        
    89.        
    90.     <documentCache class="solr.LRUCache"  
    91.                    size="512"  
    92.                    initialSize="512"  
    93.                    autowarmCount="0"/>  
    94.       
    95.        
    96.     <enableLazyFieldLoading>true</enableLazyFieldLoading>  
    97.     
    98.       
    99.    <queryResultWindowSize>20</queryResultWindowSize>  
    100.     
    101.    <!-- Maximum number of documents to cache for any entry in the  
    102.         queryResultCache.   
    103.      -->  
    104.    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>  
    105.     
    106.       
    107.     <!-- QuerySenderListener takes an array of NamedList and executes a  
    108.          local query request for each NamedList in sequence.   
    109.       -->  
    110.     <listener event="newSearcher" class="solr.QuerySenderListener">  
    111.       <arr name="queries">  
    112.         <!--  
    113.            <lst><str name="q">solr</str><str name="sort">price asc</str></lst>  
    114.            <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>  
    115.           -->  
    116.       </arr>  
    117.     </listener>  
    118.     <listener event="firstSearcher" class="solr.QuerySenderListener">  
    119.       <arr name="queries">  
    120.         <lst>  
    121.           <str name="q">static firstSearcher warming in solrconfig.xml</str>  
    122.         </lst>  
    123.       </arr>  
    124.     </listener>  
    125.     
    126.        
    127.     <useColdSearcher>false</useColdSearcher>  
    128.     
    129.        
    130.     <maxWarmingSearchers>2</maxWarmingSearchers>  
    131.     
    132.   </query>  
    133.     
    134.     
    135.   <requestDispatcher handleSelect="true" >  
    136.        
    137.     <requestParsers enableRemoteStreaming="true"   
    138.                     multipartUploadLimitInKB="2048000" />  
    139.     
    140.     <httpCaching never304="true" />  
    141.        
    142.   </requestDispatcher>  
    143.     
    144.   <requestHandler name="search" class="solr.SearchHandler" default="true">  
    145.     <!-- default values for query parameters can be specified, these  
    146.          will be overridden by parameters in the request  
    147.       -->  
    148.      <lst name="defaults">  
    149.        <str name="echoParams">explicit</str>  
    150.        <int name="rows">10</int>  
    151.      </lst>  
    152.        
    153.        
    154.     </requestHandler>  
    155.         
    156.     <requestHandler name="/browse" class="solr.SearchHandler">  
    157.      <lst name="defaults">  
    158.        <str name="echoParams">explicit</str>  
    159.     
    160.        <!-- VelocityResponseWriter settings -->  
    161.        <str name="wt">velocity</str>  
    162.     
    163.        <str name="v.template">browse</str>  
    164.        <str name="v.layout">layout</str>  
    165.        <str name="title">Solritas</str>  
    166.     
    167.        <str name="defType">edismax</str>  
    168.        <str name="q.alt">*:*</str>  
    169.        <str name="rows">10</str>  
    170.        <str name="fl">*,score</str>  
    171.        <str name="mlt.qf">  
    172.          text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4  
    173.        </str>  
    174.        <str name="mlt.fl">text,features,name,sku,id,manu,cat</str>  
    175.        <int name="mlt.count">3</int>  
    176.     
    177.        <str name="qf">  
    178.           text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4  
    179.        </str>  
    180.     
    181.        <str name="facet">on</str>  
    182.        <str name="facet.field">cat</str>  
    183.        <str name="facet.field">manu_exact</str>  
    184.        <str name="facet.query">ipod</str>  
    185.        <str name="facet.query">GB</str>  
    186.        <str name="facet.mincount">1</str>  
    187.        <str name="facet.pivot">cat,inStock</str>  
    188.        <str name="facet.range">price</str>  
    189.        <int name="f.price.facet.range.start">0</int>  
    190.        <int name="f.price.facet.range.end">600</int>  
    191.        <int name="f.price.facet.range.gap">50</int>  
    192.        <str name="f.price.facet.range.other">after</str>  
    193.        <str name="facet.range">manufacturedate_dt</str>  
    194.        <str name="f.manufacturedate_dt.facet.range.start">NOW/YEAR-10YEARS</str>  
    195.        <str name="f.manufacturedate_dt.facet.range.end">NOW</str>  
    196.        <str name="f.manufacturedate_dt.facet.range.gap">+1YEAR</str>  
    197.        <str name="f.manufacturedate_dt.facet.range.other">before</str>  
    198.        <str name="f.manufacturedate_dt.facet.range.other">after</str>  
    199.     
    200.     
    201.        <!-- Highlighting defaults -->  
    202.        <str name="hl">on</str>  
    203.        <str name="hl.fl">text features name</str>  
    204.        <str name="f.name.hl.fragsize">0</str>  
    205.        <str name="f.name.hl.alternateField">name</str>  
    206.      </lst>  
    207.      <arr name="last-components">  
    208.        <str>spellcheck</str>  
    209.      </arr>  
    210.      <!-- 
    211.      <str name="url-scheme">httpx</str> 
    212.      -->  
    213.   </requestHandler>  
    214.     
    215.   <requestHandler name="/update"   
    216.                   class="solr.XmlUpdateRequestHandler">  
    217.        
    218.     </requestHandler>  
    219.   <!-- Binary Update Request Handler  
    220.        http://wiki.apache.org/solr/javabin  
    221.     -->  
    222.   <requestHandler name="/update/javabin"   
    223.                   class="solr.BinaryUpdateRequestHandler" />  
    224.     
    225.   <!-- CSV Update Request Handler  
    226.        http://wiki.apache.org/solr/UpdateCSV  
    227.     -->  
    228.   <requestHandler name="/update/csv"   
    229.                   class="solr.CSVRequestHandler"   
    230.                   startup="lazy" />  
    231.     
    232.   <!-- JSON Update Request Handler  
    233.        http://wiki.apache.org/solr/UpdateJSON  
    234.     -->  
    235.   <requestHandler name="/update/json"   
    236.                   class="solr.JsonUpdateRequestHandler"   
    237.                   startup="lazy" />  
    238.     
    239.   <!-- Solr Cell Update Request Handler  
    240.     
    241.        http://wiki.apache.org/solr/ExtractingRequestHandler   
    242.     
    243.     -->  
    244.   <requestHandler name="/update/extract"   
    245.                   startup="lazy"  
    246.                   class="solr.extraction.ExtractingRequestHandler" >  
    247.     <lst name="defaults">  
    248.       <!-- All the main content goes into "text"... if you need to return  
    249.            the extracted text or do highlighting, use a stored field. -->  
    250.       <str name="fmap.content">text</str>  
    251.       <str name="lowernames">true</str>  
    252.       <str name="uprefix">ignored_</str>  
    253.     
    254.       <!-- capture link hrefs but ignore div attributes -->  
    255.       <str name="captureAttr">true</str>  
    256.       <str name="fmap.a">links</str>  
    257.       <str name="fmap.div">ignored_</str>  
    258.     </lst>  
    259.   </requestHandler>  
    260.     
    261.   <requestHandler name="/analysis/field"   
    262.                   startup="lazy"  
    263.                   class="solr.FieldAnalysisRequestHandler" />  
    264.     
    265.     
    266.   <requestHandler name="/analysis/document"   
    267.                   class="solr.DocumentAnalysisRequestHandler"   
    268.                   startup="lazy" />  
    269.     
    270.   <!-- Admin Handlers  
    271.     
    272.        Admin Handlers - This will register all the standard admin  
    273.        RequestHandlers.    
    274.     -->  
    275.   <requestHandler name="/admin/"   
    276.                   class="solr.admin.AdminHandlers" />  
    277.      
    278.   <!-- ping/healthcheck -->  
    279.   <requestHandler name="/admin/ping" class="solr.PingRequestHandler">  
    280.     <lst name="defaults">  
    281.       <str name="qt">search</str>  
    282.       <str name="q">solrpingquery</str>  
    283.       <str name="echoParams">all</str>  
    284.     </lst>  
    285.   </requestHandler>  
    286.     
    287.   <!-- Echo the request contents back to the client -->  
    288.   <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >  
    289.     <lst name="defaults">  
    290.      <str name="echoParams">explicit</str>   
    291.      <str name="echoHandler">true</str>  
    292.     </lst>  
    293.   </requestHandler>  
    294.       
    295.       
    296.   <searchComponent name="spellcheck" class="solr.SpellCheckComponent">  
    297.     
    298.     <str name="queryAnalyzerFieldType">textSpell</str>  
    299.     
    300.     <!-- Multiple "Spell Checkers" can be declared and used by this  
    301.          component  
    302.       -->  
    303.     
    304.     <!-- a spellchecker built from a field of the main index, and  
    305.          written to disk  
    306.       -->  
    307.     <lst name="spellchecker">  
    308.       <str name="name">default</str>  
    309.       <str name="field">name</str>  
    310.       <str name="spellcheckIndexDir">spellchecker</str>  
    311.       <!-- uncomment this to require terms to occur in 1% of the documents in order to be included in the dictionary  
    312.         <float name="thresholdTokenFrequency">.01</float>  
    313.       -->  
    314.     </lst>  
    315.     
    316.        
    317.   </searchComponent>  
    318.     
    319.      
    320.   <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">  
    321.     <lst name="defaults">  
    322.       <str name="spellcheck.onlyMorePopular">false</str>  
    323.       <str name="spellcheck.extendedResults">false</str>  
    324.       <str name="spellcheck.count">1</str>  
    325.     </lst>  
    326.     <arr name="last-components">  
    327.       <str>spellcheck</str>  
    328.     </arr>  
    329.   </requestHandler>  
    330.     
    331.   <!-- Term Vector Component  
    332.     
    333.        http://wiki.apache.org/solr/TermVectorComponent  
    334.     -->  
    335.   <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>  
    336.     
    337.   <requestHandler name="tvrh" class="solr.SearchHandler" startup="lazy">  
    338.     <lst name="defaults">  
    339.       <bool name="tv">true</bool>  
    340.     </lst>  
    341.     <arr name="last-components">  
    342.       <str>tvComponent</str>  
    343.     </arr>  
    344.   </requestHandler>  
    345.     
    346.      
    347.   <searchComponent name="clustering"   
    348.                    enable="${solr.clustering.enabled:false}"  
    349.                    class="solr.clustering.ClusteringComponent" >  
    350.     <!-- Declare an engine -->  
    351.     <lst name="engine">  
    352.       <!-- The name, only one can be named "default" -->  
    353.       <str name="name">default</str>  
    354.     
    355.       <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>  
    356.     
    357.       <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>  
    358.          
    359.       <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>  
    360.     
    361.       <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>  
    362.     </lst>  
    363.     <lst name="engine">  
    364.       <str name="name">stc</str>  
    365.       <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>  
    366.     </lst>  
    367.   </searchComponent>  
    368.     
    369.   <requestHandler name="/clustering"  
    370.                   startup="lazy"  
    371.                   enable="${solr.clustering.enabled:false}"  
    372.                   class="solr.SearchHandler">  
    373.     <lst name="defaults">  
    374.       <bool name="clustering">true</bool>  
    375.       <str name="clustering.engine">default</str>  
    376.       <bool name="clustering.results">true</bool>  
    377.       <!-- The title field -->  
    378.       <str name="carrot.title">name</str>  
    379.       <str name="carrot.url">id</str>  
    380.       <!-- The field to cluster on -->  
    381.        <str name="carrot.snippet">features</str>  
    382.        <!-- produce summaries -->  
    383.        <bool name="carrot.produceSummary">true</bool>  
    384.        <!-- the maximum number of labels per cluster -->  
    385.        <!--<int name="carrot.numDescriptions">5</int>-->  
    386.        <!-- produce sub clusters -->  
    387.        <bool name="carrot.outputSubClusters">false</bool>  
    388.            
    389.        <str name="defType">edismax</str>  
    390.        <str name="qf">  
    391.           text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4  
    392.        </str>  
    393.        <str name="q.alt">*:*</str>  
    394.        <str name="rows">10</str>  
    395.        <str name="fl">*,score</str>  
    396.     </lst>       
    397.     <arr name="last-components">  
    398.       <str>clustering</str>  
    399.     </arr>  
    400.   </requestHandler>  
    401.       
    402.   <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">   
    403.       <lst name="defaults">   
    404.       <str name="config">E:/SolrHome/solr/person/conf/data-config.xml</str>    
    405.       </lst>   
    406.     </requestHandler>  
    407.       
    408.      
    409.   <searchComponent name="terms" class="solr.TermsComponent"/>  
    410.     
    411.   <!-- A request handler for demonstrating the terms component -->  
    412.   <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">  
    413.      <lst name="defaults">  
    414.       <bool name="terms">true</bool>  
    415.     </lst>       
    416.     <arr name="components">  
    417.       <str>terms</str>  
    418.     </arr>  
    419.   </requestHandler>  
    420.     
    421.   <searchComponent name="elevator" class="solr.QueryElevationComponent" >  
    422.     <!-- pick a fieldType to analyze queries -->  
    423.     <str name="queryFieldType">string</str>  
    424.     <str name="config-file">elevate.xml</str>  
    425.   </searchComponent>  
    426.     
    427.   <!-- A request handler for demonstrating the elevator component -->  
    428.   <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">  
    429.     <lst name="defaults">  
    430.       <str name="echoParams">explicit</str>  
    431.     </lst>  
    432.     <arr name="last-components">  
    433.       <str>elevator</str>  
    434.     </arr>  
    435.   </requestHandler>  
    436.     
    437.   <!-- Highlighting Component  
    438.     
    439.        http://wiki.apache.org/solr/HighlightingParameters  
    440.     -->  
    441.   <searchComponent class="solr.HighlightComponent" name="highlight">  
    442.     <highlighting>  
    443.       <!-- Configure the standard fragmenter -->  
    444.       <!-- This could most likely be commented out in the "default" case -->  
    445.       <fragmenter name="gap"   
    446.                   default="true"  
    447.                   class="solr.highlight.GapFragmenter">  
    448.         <lst name="defaults">  
    449.           <int name="hl.fragsize">100</int>  
    450.         </lst>  
    451.       </fragmenter>  
    452.     
    453.       <!-- A regular-expression-based fragmenter   
    454.            (for sentence extraction)   
    455.         -->  
    456.       <fragmenter name="regex"   
    457.                   class="solr.highlight.RegexFragmenter">  
    458.         <lst name="defaults">  
    459.           <!-- slightly smaller fragsizes work better because of slop -->  
    460.           <int name="hl.fragsize">70</int>  
    461.           <!-- allow 50% slop on fragment sizes -->  
    462.           <float name="hl.regex.slop">0.5</float>  
    463.           <!-- a basic sentence pattern -->  
    464.           <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>  
    465.         </lst>  
    466.       </fragmenter>  
    467.     
    468.       <!-- Configure the standard formatter -->  
    469.       <formatter name="html"   
    470.                  default="true"  
    471.                  class="solr.highlight.HtmlFormatter">  
    472.         <lst name="defaults">  
    473.           <str name="hl.simple.pre"><![CDATA[<em>]]></str>  
    474.           <str name="hl.simple.post"><![CDATA[</em>]]></str>  
    475.         </lst>  
    476.       </formatter>  
    477.     
    478.       <!-- Configure the standard encoder -->  
    479.       <encoder name="html"   
    480.                class="solr.highlight.HtmlEncoder" />  
    481.     
    482.       <!-- Configure the standard fragListBuilder -->  
    483.       <fragListBuilder name="simple"   
    484.                        default="true"  
    485.                        class="solr.highlight.SimpleFragListBuilder"/>  
    486.     
    487.       <!-- Configure the single fragListBuilder -->  
    488.       <fragListBuilder name="single"   
    489.                        class="solr.highlight.SingleFragListBuilder"/>  
    490.     
    491.       <!-- default tag FragmentsBuilder -->  
    492.       <fragmentsBuilder name="default"   
    493.                         default="true"  
    494.                         class="solr.highlight.ScoreOrderFragmentsBuilder">  
    495.         <!--   
    496.         <lst name="defaults">  
    497.           <str name="hl.multiValuedSeparatorChar">/</str>  
    498.         </lst>  
    499.         -->  
    500.       </fragmentsBuilder>  
    501.     
    502.       <!-- multi-colored tag FragmentsBuilder -->  
    503.       <fragmentsBuilder name="colored"   
    504.                         class="solr.highlight.ScoreOrderFragmentsBuilder">  
    505.         <lst name="defaults">  
    506.           <str name="hl.tag.pre"><![CDATA[ 
    507.                <b style="background:yellow">,<b style="background:lawgreen">, 
    508.                <b style="background:aquamarine">,<b style="background:magenta">, 
    509.                <b style="background:palegreen">,<b style="background:coral">, 
    510.                <b style="background:wheat">,<b style="background:khaki">, 
    511.                <b style="background:lime">,<b style="background:deepskyblue">]]></str>  
    512.           <str name="hl.tag.post"><![CDATA[</b>]]></str>  
    513.         </lst>  
    514.       </fragmentsBuilder>  
    515.     </highlighting>  
    516.   </searchComponent>  
    517.     
    518.   <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">  
    519.     <int name="xsltCacheLifetimeSeconds">5</int>  
    520.   </queryResponseWriter>  
    521.     
    522.     
    523.   <admin>  
    524.     <defaultQuery>solr</defaultQuery>  
    525.   </admin>  
    526.     
    527. </config>  

    使用到的jar包,路径:E:\apache-tomcat-6.0.29\webapps\solr\WEB-INF\lib

  • 相关阅读:
    Mysql初探:内存数据刷盘机制
    数据管理流程,基础入门简介
    数据分析:复杂业务场景下,量化评估流程
    架构设计:服务自动化部署和管理流程
    Hadoop框架:MapReduce基本原理和入门案例
    架构设计:微服务模式下,实现灰度发布模式
    架构设计:分布式结构下,服务部署发布
    编码风格:Mvc模式下SSM环境,代码分层管理
    开发工具:Mybatis.Plus.插件三种方式的逆向工程
    Hadoop框架:HDFS高可用环境配置
  • 原文地址:https://www.cnblogs.com/ibook360/p/2234560.html
Copyright © 2020-2023  润新知