我正在开发一个SolR项目来创建一个咒语
为什么如果我输入“britne”它会自动填充“britney”,但是当我输入“Britne”时它没有找到任何结果?这是拼写检查的字段:
<fieldType name="suggestText" 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" splitOnCaseChange="1" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" ignoreCase="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" ignoreCase="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory" ignoreCase="true"/>
</analyzer>
</fieldType>
它在查询部分AND和索引部分中有LowerCaseFilterFactory,所以我猜测它会将我的查询转换为lowerCase并与以小写字母存储的单词进行比较,但显然不是。
此外,当我输入“Britne”,“britne”或“BriTnE”结果“Britney”(而不是“britney”)时,我想拥有。如何使我的拼写检查器不区分大小写,但返回“区分大小写的单词”?
答案 0 :(得分:0)
我不确定它是否有效,但也许您可以使用复制字段:
不要在suggestText字段上使用LowerCaseFilterFactory,而是在第二个字段上使用LowerCaseFilterFactory(让我们调用它)suggestText_lower。 然后将“字段”复制到suggestText字段中。
因此,在不降低“suggestText”字段的情况下输入“britne”来匹配“BriTnE”。
答案 1 :(得分:0)
这里有关于索引和存储的一些问题。
关于存储,当您设置stored = true时,该值将按原样存储&#39;并没有反映索引中的内容:<field name="FIELDNAME" type="text" indexed="false" **stored="true"** multiValued="false" required="true" />
要检查已存储的内容,只需创建一个显示所有字段的简单:查询。
接下来,索引。在这里,您正在处理(解析和过滤)您的值以使其可搜索。对于相同的值,您可能必须使多个索引能够进行不同类型的搜索。认真考虑一下,这通常是最好的选择。
对于索引,请使用&#34; Schema Browser&#34;检查索引值(打开管理控制台,选择您的实例,然后选择架构浏览器,然后选择要检查的字段并打开&#34;加载术语信息&#34;)。 &#34; copyField&#34;为此完成,你只需要存储一次值。
在那里你可以看到它是如何被解析的,如果真的低了你的想法:我已经有了一些惊喜。如果你没有索引,你可以试试这个tonkenizer <tokenizer class="solr.StandardTokenizerFactory"/>
和LowerCaseFilterFactory,这对我有用。
最后,您的查询也很重要,可能是您问题的解决方案。当您搜索Britne时,您应该使用相似性功能(模糊搜索)构建搜索,或者指示您希望它来自默认搜索。 您可以尝试搜索Britne~(同样是Britne~0.5)或Britne~或Britne~0.8等等。您必须根据自己的需要和背景对其进行微调。