我在solr架构中有以下字段
make
model
city
province
我创建了一个copyfield搜索并将这4个字段复制到其中
现在我想要,如果用户正在搜索
'audi a4' where audi is a make and a4 is model,
我应该得到结果,连续make是audi,模型是a4。
如果我搜索
'asd audi asd'
然后我应该只得到奥迪的结果。
如果我搜索
'asd aasd audi asd a4',
然后它应该显示audi a4结果。
请帮助我实现这一目标。
请参阅复制字段的架构
<copyField source="Make" dest="search"/>
<copyField source="Model" dest="search"/>
<copyField source="City" dest="search"/>
创建的字段如下
<field name="search" type="string" indexed="true" stored="false" multiValued="true"/>
答案 0 :(得分:0)
您可以为您的字段尝试此fieldType。
<fieldType name="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>
或者您可以尝试使用此字段输入搜索字段
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="1" catenateWords="0" catenateNumbers="0" preserveOriginal="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
所以你的领域现在是
<field name="search" type="text_ws" indexed="true" stored="false" multiValued="true"/>