我正在尝试创建一个非常简单的solr应用程序,我将索引标题和id。我想在没有任何情况下搜索标题,我已经使用了LowerCaseFilterFactory过滤器,但有些它是如何工作的。我也希望获得搜索支持。
以下是我的架构文件。
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.5">
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="_root_" type="string" indexed="true" stored="false"/>
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<uniqueKey>id</uniqueKey>
<field name="title" type="text" indexed="true" stored="true"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
</schema>
任何指针都将受到高度赞赏。
提前致谢。
答案 0 :(得分:2)
您使用“KeywordTokenizerFactory
”进行索引,使用“WhitespaceTokenizerFactory
”进行查询。
这两者的输出都不同。
KeywordTokenizerFactory
保持这个词不变。它不会对单词/文本进行标记。
但是WhitespaceTokenizerFactory
是一个在空格处划分文本的标记化器。
PorterStemFilterFactory
:一个标准化过程,用于删除单词中的常见结尾。
Example: "riding", "rides", "horses" ==> "ride", "ride", "hors".
您可以尝试修改字段类型。
现在您的要求是,您希望如何实现搜索,然后决定构建自定义fieldType
,还是可以使用fieldType
中提到的schema.xml
< / p>
您可以尝试使用以下类型字段作为字段标题
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
OR
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>