我是solr的新手。我试图使用日光浴来配置solr 6.3,但我遇到了阻塞问题。我的文档集合包括:" call"," calls"," called"," call"并且" serv","服务","服务","服务"和"服务"。我有'服务'在那里努力了解行为 茎干产生的茎干。 当我从日光浴场php页面查询solr时,获得的结果数量表明所有具有任何形式的搜索单词的文档都被考虑在内。但是,它并没有向我展示所有文件。例如:
对于查询:' serv'它只显示带有' serv的文件。 对于查询:' serve'它只显示带有“服务”的文档 对于查询:' serve'它只显示带有' serve'并且' serv' 对于查询:'已发送'它只显示提供的文件'并且' serv' 对于查询:'提供'它只显示带有'服务的文件。并且' serv'
在' call'
的情况下call --> call,
calls --> calls call,
called --> called call,
calling --> calling, call
因此,从它的外观来看,包含关键字和实际词干的文档会突出显示,但其他文档不会显示。
我希望词干分析器能够根据关键字的不同出现来显示所有这些文档。即搜索" call"应该提起来打电话#34; "调用" "称为" "电话&#34 ;.
我的架构的相关部分如下:
<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>';
}
我使用solr安装附带的solrconfig。如果有人能告诉我我做错了什么,我将不胜感激。我是否遗漏了我的架构中的某些内容,或者是否需要在solrconfig中配置一些设置?作为我的最后一招,我正在考虑使用solr.EdgeNGramFilterFactory,但我想避免这种情况。我附加了一个指向我的solr分析屏幕图像的链接。
提前谢谢。