SOLR不区分大小写搜索
我在SOLR搜索中遇到了问题。
我有这样一个数据:SOLR不区分大小写搜索
我使用Solr管理使用这样的查询找到这样的数据:
address_s:*Nadi*
,发现这些数据。但是当我使用这个查询时:
address_s:*nadi*
它没有发现任何东西。
我google搜索,我找到了答案,以创建一个字段使用以下脚本:
<fieldType name="c_text" class="solr.TextField">
<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>
我已经复制这些脚本粘贴到schema.xml中,但它仍然无法正常工作。我该怎么办?谁能帮我?
的address_s场应定义为 -
<field name="address_s" type="c_text" indexed="true" stored="true"/>
如果您使用的是默认schema.xml中,这个认定中应来之前 -
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
将其定义为一个字符串字段类型没有进行分析。
通配符查询不经过分析。
因此,如果您在索引时间应用小写字母过滤器,查询address_s:*nadi*
将起作用。
但是,查询address_s:*Nadi
*不会,因为Nadi
在索引中不会与nadi
匹配,所以您需要小写客户端的查询。
您的address_s字段是否在您的schema.xml中使用这个c_text
字段类型?
如果您的索引是使用先前的配置创建的,则需要重新索引所有内容以考虑更改。
如何做到这一点?因为我使用PHP制作所有字段。我将所有字段输入到数组中,如下所示:$ data = array(...,'address_s'=>'value','city_name_s'=>'value',...);并使用addDocument($ data)函数。任何想法。,? – Praditha
然后,您需要为已添加到索引的所有文档重新运行这些命令。数据在索引中的表示取决于已使用的分析仪。因此,如果更新用于建立索引的分析器,则需要重新索引所有文档。 – jpountz
对不起,我还是不明白我该怎么做,你可以一步一步来描述它:D,当我应该使用'c_text'字段类型到所有索引,当我重新运行我的php命令时,。 – Praditha
我用这个作为字段类型:
<fieldType name="string" class="solr.TextField">
<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>
而且使用定义我的领域:
<field name="address" type="string" indexed="true" stored="true"/>
结果:我的文档返回正确的情况下的字段(如插入),我可以搜索不区分大小写(使用大写和小写字母)...
版本:Solr 3.6
这会给你一个错误 –
我用过这样的东西... 在架构中。XML我已经投入了新的字段类型
<fieldType name="newType" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
</fieldType>
指定新类型的字段,要让它情况下&空白不敏感 然后,你必须构造形式Solr的查询:fieldName:(*fieldValue\ *)
而不是type="string"
定义字段type="text_general"
(如在缺省schema.xml中定义的)。其财产是ignore case=true
如何使大小写不敏感的集合使用动态模式(或数据驱动模式)?收藏品的创建方法如下: su - solr -c "/opt/solr/bin/solr create -c Mock2 -n data_driven_schema_configs"
我按照你的指示,但它仍然无法工作。我复制粘贴' '到schema.xml,然后重新运行java -jar start.jar并尝试查询。对不起,我想先问一下,我在.. \ solr_302 \ example \ solr \ conf下使用了schema.xml,是吗? –
Praditha
嘿,这是工作,我需要先重新插入文件。谢谢,。你知道如何通过PHP定义这些字段吗?所以我不需要手动在schema.xml中定义它。 – Praditha
'但是,查询address_s:* Nadi *不会,因为Nadi不会在索引中匹配nadi - 但是这并不是说在中具有'LowerCaseFilterFactory',所以*查询*是自动小写的? –
Madbreaks