Solr不突出显示某些词
我配置了solr 4.10(也5.3)和highlighting functionality。它可以很好地处理大多数单词,但是我找到了一些“不会”字样的字样,即solr会返回所需的文档,但不会突出显示其中的一些。Solr不突出显示某些词
什么会导致这种影响?
solrconfig.xml中
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="wt">json</str>
<str name="indent">true</str>
<str name="defType">edismax</str>
<str name="bf">product(concount)</str>
<str name="df">text bio text_syn text_syn_other</str>
<str name="qf">
text^25 bio^16 text_syn^8 text_syn_other^3
</str>
<str name="hl">on</str>
<str name="hl.fl">text bio text_syn text_syn_other</str>
<str name="hl.preserveMulti">true</str>
<str name="hl.encoder">html</str>
<str name="f.text.hl.fragsize">100</str>
<str name="hl.snippets">20</str>
<arr name="components">
<str>highlight</str>
</arr>
</lst>
schema.xml中
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms_abbr.txt" ignoreCase="true" expand="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_en_syn" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_en_syn_other" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms_other.txt" ignoreCase="true" expand="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="text_syn" type="text_en_syn" indexed="true" stored="false" multiValued="true" />
<field name="text_syn_other" type="text_en_syn_other" indexed="true" stored="false" multiValued="true" />
<field name="text_exact" type="string" indexed="true" stored="false" multiValued="false" />
<field name="bio" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="bio_exact" type="string" indexed="true" stored="false" multiValued="false" />
<field name="concount" type="long" indexed="true" stored="true" multiValued="false" />
<field name="concount_exact" type="long" indexed="true" stored="false" multiValued="false" />
<copyField source="text" dest="text_syn"/>
<copyField source="bio" dest="text_syn"/>
<copyField source="text" dest="text_syn_other"/>
<copyField source="bio" dest="text_syn_other"/>
对于查询http://localhost:8983/solr/select?q=senior
我得到了包含单词senior
文档,但在强调Solr的响应一节词不突出显示。
更新1: 我发现,我有话senior
在我synonyms_abbr.txt
文件,该行senior,lead
。当我评论那条线或者替换单词的地方时,令人惊讶的是senior
这个单词开始突出显示。有任何想法吗 ?
更新2:从synonyms.txt
和synonyms_other.txt
词越来越突出正常,但从synonyms_abbr.txt
词语运行异常如下。举例来说,我也行lead,head,senior
在synonyms_abbr.txt
然后
- 查询
http://localhost:8983/solr/select?q=senior
和http://localhost:8983/solr/select?q=head
不突出任何文字, - 查询
http://localhost:8983/solr/select?q=lead
亮点不仅字lead
,也head
和senior
。
从你UPDATE2很显然,只在lead,head,senior
的第一个词是实际用于同义词匹配和突出显示。
如果你看一下在SolrWiki https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters文档存在具有一定的效果
的同义词参数名外部文件中定义的同义词的expand=true
提。 如果ignoreCase为true,则在检查相等之前匹配将小写。 如果扩展为真,则同义词将扩展为所有等同的同义词。如果它是错误的,所有等同的同义词将被缩减到列表中的第一个。
该网站还介绍和例子
# If expand==true, "ipod, i-pod, i pod" is equivalent to the explicit mapping:
ipod, i-pod, i pod => ipod, i-pod, i pod
# If expand==false, "ipod, i-pod, i pod" is equivalent to the explicit mapping:
ipod, i-pod, i pod => ipod
这似乎是与你所观察的行为是一致的。 这意味着您应该更改schema.xml中的同义词过滤器定义以使用expand = true或更改同义词文件定义过滤器以使用显式映射的方式。
此外,由于分析仪在索引编制时工作,您可能必须重新索引文档才能使其工作。
某些字段没有存储,因此无法返回。由于它们被编入索引,因此可以搜索。将您的模式更改为您想要突出显示的所有字段的stored =“true”。
<field name="text_syn" type="text_en_syn" indexed="true" stored="true" multiValued="true" />
<field name="text_syn_other" type="text_en_syn_other" indexed="true" stored="true" multiValued="true" />
通过查看您的配置,我认为突出显示在字段生物和文本的作品?
你能尝试高级,铅和铅,资深添加到文件synonyms_abbr.txt然后再尝试运行荧光笔
请使用Solr后端功能来分析单词的转换。我不确定这个词的转换方式。这可能是一个棘手的问题。否则,使用不同的字段,关闭转换只留下标记器,然后尝试从该字段突出显示。 – 0xCAFEBABE
@Mher是否突出显示停用词?或者只是随机? –
我没有任何停用词配置。整个'stopwords.txt'文件被评论。 – Mher