【问题标题】:How to optimize documentdictionary build on solr cloud suggester?如何在 solr 云建议器上优化文档字典构建?
【发布时间】:2016-12-02 18:14:04
【问题描述】:

我有大约 300,000 条记录要上传到 solr 云建议器上。这些记录是动态的,即会添加新文档,并且将来会定期删除一些文档。我面临的问题是:

  1. 使用 FileDictionaryFactory:此方法是操作上的噩梦。我需要继续生成文件并将其上传到zookeeper(仍然没有弄清楚如何将这样的大文件上传到zookeeper)。并且可能需要分别在 solr 云上的每台服务器上创建索引。经常这样做似乎是不可能的。

  2. 使用 DocumentDictionaryFactory:这种方法似乎是一个显而易见的选择,但在这里构建索引也是一场噩梦。每次我尝试构建索引时,都会收到“设备上没有剩余空间”错误。我尝试在 5K 记录上构建它,它成功了。但这花了 40 分钟,并且在整个 40 分钟内消耗了全部 10GB 内存。

我的问题是,如果我们采用第二种方法,我们能否优化此索引构建时间。 或者,如果我遵循第一种方法,那么处理要在 solr 云上索引的频繁更改的理想方法应该是什么。

我的配置:

对于 FileDictionaryFactory:

<searchComponent name="suggest" class="solr.SuggestComponent">
        <lst name="suggester">
              <str name="name">suggestions</str>
              <str name="lookupImpl">FuzzyLookupFactory</str>
              <str name="dictionaryImpl">FileDictionaryFactory</str>
              <str name="field">searchfield</str>
              <str name="weightField">searchscore</str>
              <str name="suggestAnalyzerFieldType">text_ngram</str>
              <str name="buildOnStartup">false</str>
              <str name="buildOnCommit">false</str>
              <str name="sourceLocation">spellings.txt</str>
              <str name="storeDir">autosuggest_dict</str>
        </lst>
 </searchComponent>

  <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
        <lst name="defaults">
                <str name="suggest">true</str>
                <str name="suggest.count">10</str>
                <str name="suggest.dictionary">suggestions</str>
                <str name="suggest.dictionary">results</str>
        </lst>
        <arr name="components">
                <str>suggest</str>
        </arr>
  </requestHandler>

对于 DocumentDictionaryFactory:

<searchComponent name="suggest" class="solr.SuggestComponent">
        <lst name="suggester">
              <str name="name">suggestions</str>
              <str name="lookupImpl">FuzzyLookupFactory</str>
              <str name="dictionaryImpl">DocumentDictionaryFactory</str>
              <str name="field">searchfield</str>
              <str name="weightField">searchscore</str>
              <str name="payloadField">payload</str>
              <str name="suggestAnalyzerFieldType">text_ngram</str>
              <str name="buildOnStartup">false</str>
              <str name="buildOnCommit">false</str>
              <str name="sourceLocation">spellings.txt</str>
              <str name="storeDir">autosuggest_dict</str>
        </lst>
 </searchComponent>

  <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
        <lst name="defaults">
                <str name="suggest">true</str>
                <str name="suggest.count">10</str>
                <str name="suggest.dictionary">suggestions</str>
                <str name="suggest.dictionary">results</str>
        </lst>
        <arr name="components">
                <str>suggest</str>
        </arr>
  </requestHandler>

【问题讨论】:

  • 你需要显示你的推荐者配置文件,特别是 buildOnCommit 等设置
  • 在描述中添加了配置。

标签: solr apache-zookeeper spell-checking solrcloud


【解决方案1】:

我认为 DocumentDictionaryFactory(这是我的首选)的主要问题是您使用的是 text_ngram。如果您的值不是很短,这将产生(我猜,您没有共享 text_ngram 定义)一个非常大的 FST,因此需要时间来创建它。

除非我遗漏了一些东西,否则您不需要这样做,只需使用一些可以使用 StandardTokenizerFactory 进行标记的类型,并且建议应该可以工作。

【讨论】:

  • 对不起,我没有机会尝试这个。会做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
相关资源
最近更新 更多