我在SOLR搜索中遇到了问题。
我有这样的数据:
我使用solr admin使用如下查询查找此数据:
address_s:*Nadi*
并找到了那些数据。但是当我使用这个查询时:
address_s:*nadi*
它没有找到任何东西。
我在谷歌搜索,我找到了一个用以下脚本创建一个字段的答案:
<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中,但它仍然无效。我该怎么办?任何人都可以帮助我吗?
答案 0 :(得分:12)
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
不匹配,您需要在客户端小写查询。
答案 1 :(得分:7)
我用它作为字段类型:
<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
答案 2 :(得分:5)
您的address_s字段是否在schema.xml中使用此c_text
字段类型?
如果您的索引是使用之前的配置创建的,则需要重新索引所有内容以将更改考虑在内。
答案 3 :(得分:1)
我用过这样的东西...... 在schema.xml中我添加了一个新的fieldType
<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\ *)
答案 4 :(得分:1)
而不是type="string"
定义字段type="text_general"
(在默认schema.xml中定义)。在eof上它的属性是ignore case=true