Почему в Solr «построить» не означает «строить», а «строить»?

Я пытаюсь понять две вещи в этой публикации:

  1. Почему «построено» НЕ связано с «построением», даже если в определении типа поля определен стеммер. Тем не менее, «строительство» сводится к «строительству».

  2. Как использовать Luke для изучения указателя, чтобы увидеть, какие слова и к чему относятся. Я не мог видеть, как слово «строительство» переводится как «строить» у Луки. Я знаю, что Lucene препятствует этому, потому что я могу успешно получить строку с «зданием», выполнив поиск «сборка».

Эта ссылка была очень полезной, но не ответила на мои вопросы .

Для справки, вот фрагменты schema.xml.

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <!-- Case insensitive stop word removal.
      add enablePositionIncrements=true in both the index and query
      analyzers to leave a 'gap' for more accurate phrase queries.
    -->
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords_en.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
    <filter class="solr.EnglishMinimalStemFilterFactory"/>
    -->
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords_en.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
    <filter class="solr.EnglishMinimalStemFilterFactory"/>
    -->
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

и определение поля

<field name="features" type="text_en" indexed="true" stored="true" multiValued="true"/>

Набор данных состоит из нескольких документов, 1 документ имеет значение «здание» в поле функций, 1 документ имеет значение «построено» в том же поле и 1 документ имеет значение «Встроенный» в поле функций:

файл: hd.xml:

<field name="features">building NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor</field>

файл ipod_video.xml:

<field name="features">Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication</field>

файл sd500.xml:

 <field name="features">built in flash, red-eye reduction</field>

Используя Lukeall-3.3.0, это результат, который я получаю от поиска «features: build». Обратите внимание, что я возвращаю 1 (вместо ожидаемых 3 документов) введите здесь описание изображенияДаже в этом одном документе Я не вижу основы, то есть я вижу только исходное слово «здание», как показано: введите описание изображения  здесь

и, опять же, в Люке поиск по запросу «features:built» возвращает два документа: введите здесь описание изображения

При выборе одного из них отображается исходное «построено», но не «сборка». введите здесь описание изображения


person jabawaba    schedule 18.08.2011    source источник
comment
Просто чтобы прокомментировать для тех, кто позже найдет это через Google - то, о чем вы просите, обычно называется лемматизацией, а не стеммингом (поскольку стемминг обычно просто отбивает концы слов и не извлекает никакого контекста или смысла из самого слова, он также не использует словарь для поиска других форм того же слова).   -  person MatsLindh    schedule 28.07.2015


Ответы (1)


В исключительных случаях, подобных этому, вы можете настроить алгоритм стемминга с помощью StemmerOverrideFilter

person Robert Muir    schedule 18.08.2011
comment
Спасибо, Роберт. Я бы не подумал, что построено исключительно. У меня сложилось впечатление, что все слова английского языка можно вывести из корней. Построить/создать, выбрать/выбрать, вести/возглавить, ... все это примеры, которые, как я полагаю, сможет обработать PorterFilter. В противном случае, если это не так, как я узнаю, какие из них не работают, если я не попробую весь словарь или не дождусь жалобы пользователя. - person jabawaba; 18.08.2011