Solr学习总结-Analyze

payload:可以用来对某些词语的匹配增加权重,前提是增加的文档已经分词,首先定义field的类型以及采用的分词和过滤器,还有payload标识
<fieldtype name="partofspeech" class="solr.TextField">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.DelimitedPayloadTokenFilterFactory"
encoder="integer" delimiter="|"/>
</analyzer>
</fieldtype>
定义field使用payload的fieldtype
<field name="id" type="string" indexed="true" stored="true"
required="true" />
<field name="text" type="text" indexed="true" stored="true" />
<field name="speech" type="partofspeech" indexed="true" stored="true"
multivalued="true" />
添加的文档中包含payload的格式
<add>
<doc>
<field name="id">1</field>
<field name="text">ugly human</field>
<field name="speech">ugly|3 human|6</field>
</doc>
<doc>
<field name="id">2</field>
<field name="text">big book example</field>
<field name="speech">big|3 book|6 example|1</field>
</doc>
</add>

注:如果要是payload起到boost的作用,需要自己写QueryParser和Similarity.

 

消除xml和html标签:定义fieldtype包括分词器和过滤器,尤其要注意charFilter

<fieldType name="html_strip" class="solr.TextField">
<analyzer>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<add>
<doc>
<field name="id">1</field>
<field name="html">
<![CDATA[<html><head><title>My page</title></head>
<body><p>This is a <b>my</b><i>sample</i> page</body></html>]]></field>
</doc>
</add>

</analyzer></fieldType>
定义相应的field
<field name="id" type="string" indexed="true" stored="true"
required="true" />
<field name="html" type="html_strip" indexed="true" stored="false" />
添加文档:
分词建立索引的时候会去掉html标签。
copyfield:组合多个field为一个field,定义copyfield
<copyField source="author"dest="author_facet" maxChars="200"/>
定义要复制的field:
<field name="author" type="text" indexed="true" stored="true"/>
<field name="author_facet" type="string" indexed="true" stored="false"/>
文档:
<add>
<doc>
<field name="id">2</field>
<field name="name">Some other book</field>
<field name="author">Jane Kowalsky</field>
</doc>
</add>
注:copyfield只对新建的索引有效。

改变词,比如按照多个近义词建立索引或者查询:对建索引定义近义词
<fieldType name="text_syn" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" 
synonyms="synonyms.txt" ignoreCase="true" expand="false" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
 
定义近义词的field:
<field name="description" type="text_syn" indexed="true" stored="true"/>
注:一定要不单词本身定义为自己的近义词。
 
对组合词切分:比如对PowerShot切分,可以按照Power查询也可以按照Shot查询
<fieldType name="text_split" class="solr.TextField">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
splitOnCaseChange="1"/><!-- 指定按照大小写变化的时候切分-->
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
定义field:
<field name="id" type="string" indexed="true" stored="true"
required="true" />
<field name="description" type="text_split" indexed="true"
stored="true" />
 
在索引中保存几何数据:定义fieldtype
<fieldType name="point" class="solr.PointType" dimension="2"
subFieldType="int"/><!-- 指明维度和子类型 -->
定义field
<field name="location" type="point" indexed="true"
stored="true"multiValued="true" />
 
模糊查询:定义fieldtype
<fieldType name="string_wildcard" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1"
maxGramSize="25" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>
定义field:
<field name="name" type="string_wildcard" indexed="true" stored="true"/>
文档:
<add>
<doc>
<field name="id">1</field>
<field name="name">XYZ1234ABC12POI</field>
</doc>
</add>
查询可以得到数据:
http://localhost:8983/solr/select?q=name:XYZ1
注:必须在建索引的时候就指定。
 
按照数字或者分隔符“-”切分
<fieldType name="text_split" class="solr.TextField">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
generateNumberParts="1" splitOnNumerics="1" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>



   

你可能感兴趣的:(html,String,Solr,Class,facet,wildcard)