EdgeNGramFilterFactory не работает (не индексируется?) - PullRequest
1 голос
/ 08 апреля 2011

У меня проблемы с получением нграмм на работу. Вот мой 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="1" maxGramSize="25" />

  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
  </analyzer>
</fieldType>

В моей базе данных есть куча записей с

"Элизабет"

и

"Elizabeths"

Когда я пытаюсь запросить «Элизабет», я получаю только «Элизабет», а не «Элизабет». Странно то, что когда я проверяю solr admin, страница анализа показывает, что EdgenGramFilterFactory действительно доступна, и в результате "Elizabeths" расширяется до

эль эли элиза элизаб элизабет элизабет элизабет

Кажется, что индексатор не понимает этого. У меня та же проблема, когда я перемещаю фильтр синонимов из блока запроса в блок индекса. То есть, когда у меня есть фильтр синонимов в блоке запросов, он работает, но когда я помещаю его в индексный блок, он не действует.

Я перезапустил Sunspot и переиндексировал несколько раз. Нет кости. Есть идеи? Как я могу напрямую проверить список проиндексированных слов?

1 Ответ

2 голосов
/ 09 апреля 2011

Я думаю, что нашел проблему, и это похоже на ошибку noob.

В моей модели использовалась следующая конструкция согласно одному из руководств:

class Institution < ActiveRecord::Base
 .
 .
 .
end

Sunspot.setup(Institution) do
  text :name
end

Этоне выдает никаких ошибок при запуске, остановке или переиндексации.Мне показалось странным, что я смог переиндексировать сразу после остановки Solr.

Я переключился на

class Institution < ActiveRecord::Base
  .
  .
  .
  searchable do
    text :name
  end
endH

Когда я сделал это, я обнаружил, что не могу переиндексировать после остановки Solr.Однако, когда я запустил Solr и переиндексировал, индекс, по-видимому, действительно обновился, и мои запросы наконец-то работали, как и ожидалось.

...