У меня есть приложение Rails + Sunspot, и я работаю над его настройкой, чтобы поиск возвращал однослойную версию запроса.Например:
Я хочу, чтобы поиск "куки" возвращал что-то с именем "куки".В настоящее время мой поиск в Sunspot возвращает «cookies», но не «cookie» (singluar).
Я внес некоторые изменения в schema.xml в Solr, добавив solr.EdgeNGramFilterFactory для обеспечения большей гибкости, но EdgeNGramFilterFactory не подходит для этогослучай, поскольку он разрешает совпадения только тогда, когда запрос является подстрокой имени результата.Насколько я понимаю, EdgeNGramFilterFactory будет возвращать «cookie», когда пользователь ищет «co», «coo», «cook» или «cooki», но не суперструну «cookie» (то есть: куки).Проще говоря, это потому, что «cookie» не является подстрокой в «cookie».
Я пытался добавить все три встроенных фабрики по производству стоек Solr, но безрезультатно.Вы можете увидеть один закомментированный в моей схеме.
В schema.xml соответствующее поле выглядит следующим образом:
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
<!-- <filter class="solr.EnglishMinimalStemFilterFactory"/> -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Я предполагал, что мог бы сделать один запрос пользователя одним, но я бы не хотелдотроньтесь до их запроса, прежде чем он достигнет Solr.
Вы можете поиграть с этим здесь: http://staging.zisboombah.com/parent/food_guide/?search=cookie. Попробуйте изменить запрос между "cookie" и "cookies".
Любые советы о том, каксделать это в Solr будет очень признателен!