<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>