我在sitecore应用程序中将搜索提供程序从lucene切换为solr。 solr的sitecore中有一些添加到schema.xml中。我正在使用solr 6.6.3。 更改成功,但某些搜索结果与以前不同。
示例: 搜索德语单词“ Trommelfilter”将不会返回任何结果。 搜索德语单词“ Trommelfilt”将返回预期结果。
似乎“ er”可能已在内部删除。 也许是某些文化特定的问题?
我再次直接运行搜索,但是问题仍然存在。
Solr查询1:
searchcontent_t_de:(*Trommelfilt*)
结果:
{
"responseHeader":{
"status":0,
"QTime":4,
"params":{
"q":"searchcontent_t_de:(*trommelfilt*)",
"indent":"on",
"wt":"json",
"_":"1554983614349"}},
"response":{"numFound":0,"start":0,"docs":[]
}}
Solr查询2:
searchcontent_t_de:(*Trommelfilter*)
结果:
{
"responseHeader":{
"status":0,
"QTime":8,
"params":{
"q":"searchcontent_t_de:(*Trommelfilt*)",
"indent":"on",
"wt":"json",
"_":"1554983656940"}},
"response":{"numFound":1,"start":0,"docs":[
{
...
"_templatename":"Application",
"culture_s":"de-DE",
"_database":"master",
"searchcontent_t_de":"... einen Trommelfilter gereinigt. ...",
"_language":"de-DE",
...
}}
这是负责在solr中为受影响的核心配置的架构的代码。 “ searchcontent_t_de”的配置是通过dynamicField进行的。
<dynamicField name="*_t_de" type="text_de" indexed="true" stored="true" />
...
<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
<filter class="solr.GermanNormalizationFilterFactory" />
<filter class="solr.GermanLightStemFilterFactory" />
<!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
<!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
</analyzer>
</fieldType>
我想知道我必须做哪些更改才能获得预期的结果(应该找到完整的词)。
答案 0 :(得分:2)
通配符搜索不会对已配置的分析链执行任何步骤-当您使用通配符(*
)时,将跳过这些步骤。
这也是为什么您没有获得成功的原因,因为存储令牌时会出现词干过滤器-这会从存储的令牌中删除er
。
带通配符:在索引中:trommelfilt
-在搜索中:*trommelfilter*
。它们不匹配-由于存储的令牌没有er
,并且在存在通配符时不会进行删除,因此不会生成匹配项。
如果您删除通配符(即仅搜索trommelfilter
),您将大获成功,因为在建立索引和查询时都会进行相同的处理。查询字符串也将只处理为trommelfilt
,与索引中的trommelfilt
令牌匹配。