我是Solr 6.0&的新手。日光浴室整合。我已经设置了运行但是字段没有返回结果
不完全匹配查询。例如,我有一个网址字段包含'http://ayodeji.com'
或'http://ayo-tuntun.com'
,但查询了' ayo'不会返回这些行,尽管它们在Solr管理部分中返回了*:*
个查询。我已在托管模式文件中将字符串更改为文本但仍无法正常工作。
请帮忙
以下是我正在使用的Solarium dismax示例中的代码。谢谢。
$client = new Solarium\Client($config);
$query = $client->createSelect();
$dismax = $query->getDisMax();
$dismax->setQueryFields('url^5 author^3 body^1 title');
$searchTerm = 'ayo';
$query->setQuery($searchTerm);
$resultset = $client->select($query);
echo 'NumFound: '.$resultset->getNumFound();
foreach ($resultset as $document) {
echo '<hr/><table>';
// the documents are also iterable, to get all fields
foreach ($document as $field => $value) {
// this converts multivalue fields to a comma-separated string
if (is_array($value)) {
$value = implode(', ', $value);
}
echo '<tr><th>' . $field . '</th><td>' . $value . '</td></tr>';
}
echo '</table>';
}
答案 0 :(得分:1)
您需要使用WordDelimiterFilter按小部分拆分网址。
https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" catenateWords="1" types="wdfftypes.txt"
generateNumberParts="1" catenateNumbers="1" splitOnNumerics="1"
catenateAll="1" splitOnCaseChange="1"
stemEnglishPossessive="0" preserveOriginal="0" />
</analyzer>
我附上了测试结果的图片。
在分析工具的左侧,您可以看到已匹配ayo关键字。
我的text_general fieldType
示例 <fieldType name="text_general" class="solr.TextField" omitNorms="false" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" catenateWords="1" types="wdfftypes.txt"
generateNumberParts="1" catenateNumbers="1" splitOnNumerics="1"
catenateAll="1" splitOnCaseChange="1"
stemEnglishPossessive="0" preserveOriginal="0" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" catenateWords="1" types="wdfftypes.txt"
generateNumberParts="1" catenateNumbers="1" splitOnNumerics="1"
catenateAll="1" splitOnCaseChange="1"
stemEnglishPossessive="0" preserveOriginal="0" />
</analyzer>
</fieldType>
答案 1 :(得分:0)
Solr不搜索子串。即:搜索“ello”找不到包含“helloworld”的文档是正常行为。如果您愿意,可以使用*ello*
作为搜索字符串。