Документы результатов Solr Stemming не отображаются, даже если они учитываются в наборе результатов

Я новичок в Solr. Я пытаюсь настроить Solr 6.3 с помощью солярия, но я работаю над решением проблемы. В моей коллекции документов есть такие слова, как: "звонок", "звонки", "звонил", "звонил" и "служил", "служил", "служил", "служил" и "служил". У меня есть "серв", чтобы понять поведение стеммера с полученным стеблем. Когда я запрашиваю solr со своей php-страницы в солярии, количество полученных результатов показывает, что все документы, которые имеют форму искомого слова, учитываются. Тем не менее, он не показывает мне все документы. Например:

Для запроса: 'serv' Показывает только документ с 'serv' Для запроса: 'serve' Показывает только документ с 'serve'
Для запроса: 'serve' Показывает только документ с 'serve' и 'serv' Для запроса: 'serve' Показывает только документ с 'serve' и 'serv'. Для запроса: 'serve' Отображается только документ с "служение" и "серв"

В случае "вызова"

call --> call,
calls --> calls call,
called --> called call,
calling --> calling, call

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

Я ожидаю, что стеммер поднимет все эти документы с различными вхождениями ключевого слова. т. е. при поиске "звонка" следует вызывать "звонить", "звонить", "звонить", "звонить"

Соответствующие части моей схемы следующие:

<field name="content" type="text_en" indexed="true" stored="true"/>
 <field name="_text_" type="stemmed_text" multiValued="true" indexed="true" stored="false"/>
 <dynamicField name="stemmed_*" type="stemmed_text" indexed="true" stored="false" />
 <copyField source="*" dest="_text_" />

<fieldType name="stemmed_text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
  <tokenizer class="solr.ClassicTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.KeywordRepeatFilterFactory"/>
  <filter class="solr.HunspellStemFilterFactory" dictionary="en_GB.dic" affix="en_GB.aff" ignoreCase="true" strictAffixParsing="true" />
  <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.ClassicTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.KeywordRepeatFilterFactory"/>
  <filter class="solr.HunspellStemFilterFactory" dictionary="en_GB.dic" affix="en_GB.aff" ignoreCase="true" strictAffixParsing="true" />
  <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index"> 
  <tokenizer class="solr.ClassicTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.ClassicTokenizerFactory"/>
  <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
  <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>   
  <filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>

Часть моей страницы PHP выглядит следующим образом:.....

// get a select query instance
    $query = $client->createSelect();
    $query->setFields(array('id', 'subject', 'content'));
// $query->setQuery('someWord');
    $query->setQuery($someWord);
    $query->setStart(0)->setRows($limit);
// get highlighting component and apply settings
    $hl = $query->getHighlighting();
    $hl->setSnippets(15);
    $hl->setFields(array('content'));
    $hl->setSimplePrefix('<strong>');
    $hl->setSimplePostfix('</strong>');

.....

foreach ($resultset AS $document) {
            $subj ='';     
            if (is_array($document->subject))  {
                $subj = implode(', ', $document->subject);  
            }       
                echo '<table style="margin-bottom:20px; text-align:left; border:none; width:500px">';
                $highlightedDoc = $highlighting->getResult($document->id);
            if ($highlightedDoc) {  
                foreach ($highlightedDoc as $field => $highlight) {
                    echo $subj;
                    echo implode(' (...) ', $highlight) . '<br/>';
            }   
        }

        echo '</table>';
        } 

Я использую solrconfig, который поставляется с установкой solr. Я был бы очень признателен, если бы кто-нибудь сказал мне, что я делаю неправильно. Я что-то упускаю из своей схемы или есть какие-то настройки, которые мне нужно настроить в solrconfig? В качестве последнего средства я думаю об использовании solr.EdgeNGramFilterFactory, но я бы хотел этого избежать. Я прилагаю ссылку на изображение моего экрана анализа Solr.

Заранее спасибо.

Solr Анализ слова "вызов"

Solr Admin Console с подсветкой

0 ответов

Другие вопросы по тегам