没有数据导入处理程序的Solr加载信息

时间:2012-03-12 17:13:48

标签: solr dataimporthandler

我有700,000个街道名称,8111个市政名称和80333个地方邮政编码。我想在solr中索引所有这些信息。用户希望通过ajax自动填充表单搜索此信息。我已经用很少的数据证明了这一点,并且ajax自动完成的行为形式没问题。

 <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
  </analyzer>
</fieldType>

将所有数据加载到solr

时会出现问题
  • 我应该如何将信息加载到solr服务器(我在grails应用程序中,我需要加载具有没有数据输入处理程序的信息的实例)今天我已经花了很多时间来完成它并最终grails控制台崩溃:( - &gt;我应该使用grails脚本而不是服务并使用grails控制台执行它?
  • 或者我应该使用数据输入处理程序来加载它?我可以使用数据输入处理程序来连接来自不同表的不同列的字符串值吗?

(可以为每个文档提供不同的文档(700.000 + 8111 + 80.333文档)??)

感谢您的时间

2 个答案:

答案 0 :(得分:1)

我认为您的城市,街道名称和邮政编码应该单独自动完成。在这种情况下,您将为每个使用单独的solr core

  

或者我应该使用数据输入处理程序来加载它吗?

DIH会非常快,只要这些信息不会经常变化,就可以这样做。

  

我可以使用数据输入处理程序来连接来自不同表的不同列的字符串值吗?

是;在data-config.xml中,您提供了特定的SQL查询,并且可以使用数据库的本机连接(例如,oracle中的||)。

答案 1 :(得分:1)

说真的,编写一个shell脚本并使用curl将更新发送给SOLR。

你正试图用漂浮在游泳池漂浮的船上的大炮射击罐子。你不需要大炮,船只或游泳池。只需用气枪站在那里,然后逐个弹出更新,直到完成。

对于带有示例SOLR更新的检查shell脚本,从您附近的镜像下载SOLR二进制文件,apache-solr-3.5.0.tgz或apache-solr-3.5.0.zip。在http://lucene.apache.org/solr/downloads.html

找到镜像

解压缩存档,进入示例目录并按照这些说明进行操作 http://lucene.apache.org/solr/tutorial.html

如果您使用的是UNIX,请使用post.sh。

顺便说一下,检查服务器上安装的SOLR版本。如果它不是3.50,那么为什么你现在使用旧版本时才使用旧版本呢?