Документы результатов 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.
Заранее спасибо.