通过对此blog的引用,我向schema.xml添加了新的Solr字段类型“text_suggest_ngram”,如下所示。
<fieldType name="text_suggest_ngram" class="solr.TextField">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory"
mapping="mapping-ISOLatin1Accent.txt" />
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="0" catenateNumbers="0"
catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory"
maxGramSize="20" minGramSize="1" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" />
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory"
mapping="mapping-ISOLatin1Accent.txt" />
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="0" generateNumberParts="0"
catenateWords="0" catenateNumbers="0"
catenateAll="0" splitOnCaseChange="0" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="^(.{20})(.*)?" replacement="$1" replace="all" />
</analyzer>
以下是solrconfig.xml的suggestngram请求处理程序
<requestHandler name="/suggestngram" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="rows">10</str>
<str name="fl">myterm</str>
<str name="qf">term_suggest^30 term_suggest_ngram^50.0</str>
<str name="pf">term_suggest_edge^50.0</str>
<str name="group.field">term_suggest_ngram</str>
<str name="sort">count desc, term_suggest_ngram asc</str>
<str name="group.sort">count desc</str>
</lst>
</requestHandler>
这适用于所有情况,除非我查找具有特殊字符的条款,例如“汽车和自行车”或“car.bike”它忽略了特殊字符&amp;显示不相关的结果。如果我搜索摇滚乐,它会显示摇滚乐,摇滚乐,滚动等。 我也尝试过/在特殊角色之前。
答案 0 :(得分:1)
<filter class="solr.PatternReplaceFilterFactory"
pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" />
这会删除大部分不常见的字符。所以,这可能是你的问题。尝试将其评论出来,看看你得到了什么。
但一般来说,您可以查看Web Admin UI的分析屏幕,看看文本如何通过每个单独的过滤器以及它成为您不期望的位置。您甚至可以在另一侧输入查询文本,看它是否会按预期匹配。这是强烈推荐的,特别是如果你只是复制了定义而没有完全理解它的作用。