在我的rails应用程序中,我正在使用solr搜索。子串匹配在本地服务器上正常工作,但它在我的部署服务器上匹配完整的单词。
可搜索的块
searchable do
text :firstname, :lastname, :login, :mail
boolean :member
integer :status
end
schema.xml 是。
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" side="front" />
</analyzer>
</fieldType>
我做错了什么?
答案 0 :(得分:1)
(在此处添加答案以告知您可能存在的不良行为)
FYI,
当您对"text" fieldType
中的schema.xml
进行更改时,您正在更改应用中每个索引文本字段的配置。有时这不是必需的,因为某些字段需要自定义配置。
例如,让我们说(无论出于何种原因)您想要以不同于其他文本字段的方式处理名字。我们假设你想添加名字的同义词。您首先要在名为fieldType
的{{1}}
schema.xml
first_name
然后在<fieldtype name="first_name" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
</analyzer>
</fieldtype>
文件的fields
部分,您将添加两个新的动态字段
schema.xml
注意:&#39;&#39;在<dynamicField name="*_first_name" stored="false" type="first_name" multiValued="false" indexed="true"/>
<dynamicField name="*_first_names" stored="true" type="first_name" multiValued="false" indexed="true"/>
名称上表示它是一个存储类型,为动态字段提供*有助于太阳黑子配置
因此,在dynamicField
块中,您现在可以执行以下操作:
searchable
现在,您将使用自定义配置的searchable do
text :firstname, :as => :user_first_name
text :lastname, :login, :mail
boolean :member
integer :status
end
字段。
如果您希望first_name成为存储值(并且您仍想使用自定义配置),则可以实现可搜索的块,如:
"first_name"