我在通过SOLR建议程序近乎实时地显示结果时遇到了一些问题。尽管如此,如果我尝试使用搜索处理程序,它在接近实时的搜索中可以正常工作。如果我添加了一个文档,我可以通过搜索处理程序在近rel时间内检索该文档,但只有在我重新加载核心之后,suggester中才有相同的记录。为什么会发生这种情况?这是我在solr-config.xml 中的suggester条目
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str> <!-- org.apache.solr.spelling.suggest.fst -->
<str name="dictionaryImpl">DocumentDictionaryFactory</str> <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory -->
<str name="field">email</str>
<str name="weightField">popularity</str>
<str name="suggestAnalyzerFieldType">string</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">mySuggester</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
这是我输入的自动提交和软提交(使用默认值)
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
</autoSoftCommit>
我无法近乎实时地获取suggester的结果的原因是我错过了这个属性
<str name="buildOnCommit">true</str>
希望这能帮助其他人。
引用Lucidworks指南:
"特别是,任何使用"DocumentDictionaryFactory"的版本在构建suggester时都会从字段存储的数据中读取原始数据!这意味着,如果您已将1M个文档添加到索引中并开始构建,则每个文档都必须:从磁盘读取解压缩纳入建议者的数据结构中。这样做的结果是,在配置中指定的字段必须在架构中设置stored="true"。正如你所能想象的,这可能需要一段时间,不能轻易完成。在Mac Pro上的1100万文档维基百科转储中,"一段时间"几乎需要10分钟。"
知道:"buildOnStartup"参数应该设置为"false"。真的。这可能会导致启动时间很长,在很大的索引上需要几分钟。你真的想在每次启动Solr时重读、解压缩并将每个文档中的字段添加到suggester中吗?可能不会,但如果你愿意,你可以。"。"buildOnCommit"参数应设置为"false"。真正地你真的想在每次提交时重读、解压缩并将每个文档中的字段添加到suggester中吗!可能不会,但如果你愿意,你可以。"
希望这能有所帮助!