У меня есть следующие поля в схеме solr
make model city province
Я создал поиск по копированию и скопировал эти 4 поля в нем
теперь я хочу, если пользователь ищет
'audi a4' where audi is a make and a4 is model,
Я должен получить результат, где в строке make есть audi, а модель – a4.
В случае, если я ищу
'asd audi asd'
то я должен получить результат только audi.
В случае, если я ищу
'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"/>
Вы можете попробовать этот 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"/>