Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从solr 3.6迁移到4.0时同义词的不同行为_Solr_Lucene_Solrj_Synonym_Solr4 - Fatal编程技术网

从solr 3.6迁移到4.0时同义词的不同行为

从solr 3.6迁移到4.0时同义词的不同行为,solr,lucene,solrj,synonym,solr4,Solr,Lucene,Solrj,Synonym,Solr4,我正在研究从Solr3.6到4.0的迁移 我开发了一个不超过2500个文档的微型系统。此外,我已经开发了4100多个测试,以确保在每次更改时,系统的功能不会恶化 对于这次迁移,我保留了Solr4.0的默认设置,只是添加了我自己的fieldType(我在schema.xml和solrconfig.xml中看到了很多新设置) 因此,在没有同义词的第一次运行中,版本4.0和3.6之间的差异只是4100中的一个句子(在4.0中,这个短语比3.6更好)。然而,如果我包括同义词,偏差会变得更加明显,在4.0

我正在研究从Solr3.6到4.0的迁移

我开发了一个不超过2500个文档的微型系统。此外,我已经开发了4100多个测试,以确保在每次更改时,系统的功能不会恶化

对于这次迁移,我保留了Solr4.0的默认设置,只是添加了我自己的fieldType(我在schema.xml和solrconfig.xml中看到了很多新设置)

因此,在没有同义词的第一次运行中,版本4.0和3.6之间的差异只是4100中的一个句子(在4.0中,这个短语比3.6更好)。然而,如果我包括同义词,偏差会变得更加明显,在4.0时会有更糟糕的结果

我的字段类型如下:

<fieldType name="text_es_lemma" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.lnk" ignoreCase="true" expand="false"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.lnk" format="snowball" enablePositionIncrements="true"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="myownlibrary.solr.analysis.SpanishLemmaFilterFactory" dictionary="lang/avatar_dictionary/adj_num_ord-lex.src,lang/avatar_dictionary/basic-lex.src" ignoreCase="true"/>
  </analyzer>

  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.lnk" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.lnk" format="snowball" enablePositionIncrements="true"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="myownlibrary.solr.analysis.SpanishLemmaFilterFactory" dictionary="lang/avatar_dictionary/adj_num_ord-lex.src,lang/avatar_dictionary/basic-lex.src" ignoreCase="true"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
  </analyzer>
</fieldType>

具有同义词的文件在两个版本中都是相同的


同义词在4.0和3.6中的用法有什么不同吗?我是否必须在4.0中以不同的方式指定它们?

为什么要在两侧使用同义词FilterFactory(索引时间和查询时间)。通常同义词FilterFactory只使用一次,可以是索引时间,也可以是查询时间,但不能同时使用两者。@randroid,afaik建议的配置是在两侧使用同义词,附带条件是在索引时使用expand=true,在查询时使用expand=false。我不确定在两侧使用它有什么好处。例如,我们有“TV,TV,TV”,我们索引术语“TV”,然后索引值将包含所有4个术语(电视、电视、电视、电视),现在当我们搜索“电视”时,在查询时分析期间,它将从同义词中选择第一个项目(电视),因为我们有expand=false。如果我们在查询时没有同义词过滤器工厂,那么它将只匹配查询词,这应该可以工作,因为我们在索引时扩展了同义词。