Zotonic 有一个mod提供全文搜索功能: mod_search_solr , 需要另行下载: http://modules.zotonic.com/page/323/mod-search-solr

如果需要支持中文分词的全文搜索,需要把中文分词器整合到solr里面。这里选用 mmseg4j 作为中文分词器。

另外,mod_search_solr只支持对zotonic的rsc表进行全文搜索。如果想对其他表或者多表搜索,需要自己改造代码。

 

1. 下载mod_search_solr, 放到zotonic目录 user/modules  下

2. 启动zotonic。 一切正常的话,在浏览器打开 http://127.0.0.1:8983/solr/ 可以看到 solr 的web控制面板。在Dashboard的version里可以查看当前solr的版本。

 如果出现错误,可以在 mod_search_solr/priv/logs里面查看log。

3. 下载mmseg4j。mmseg4j有好多版本,而且跟solr各个版本的兼容性都比较苛刻。根据你在solr Dashboard里面看到的solr版本,选用mmseg4j.(各个版本的mmseg4j对solr的支持都会写在README文件)。

  我用的solr是4.0。与他兼容的有mmseg4j 的1.9.0版本。但是有严重bug: http://code.google.com/p/mmseg4j/issues/detail?id=38

  所以去这里下载新版,经测试没有问题:

 http://mmseg4j.googlecode.com/files/mmseg4j-1.9.1.v20130120-SNAPSHOT.zip  解决了 lucene 4.0 的分词接口问题。

  你需要三个jar包,分别是:  mmseg4j-analysis-1.9.1-SNAPSHOT.jar  mmseg4j-core-1.9.1-SNAPSHOT.jar  mmseg4j-solr-1.9.1-SNAPSHOT.jar; 另外还需要任意版本的中文词库, mmseg4j的中文词库是一个data文件夹 ,里面有这几个文件

  chars.dic  units.dic  words.dic  words-my.dic

4. 把3个jar包放到mod_search_solr/priv/solr/solr-webapp/webapp/WEB-INF/lib下

5. 把词库文件(*.dic) 放到mod_search_solr/priv/cores/你自己的core/data下

6. 修改mod_search_solr/priv/cores/你自己的core/conf/schema.xml文件

  在types标签内添加这段:

  

     <fieldType name="textComplex" class="solr.TextField" >
          <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" />
          </analyzer>
        </fieldType>
        <fieldType name="textMaxWord" class="solr.TextField" >
          <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" />
          </analyzer>
        </fieldType>
        <fieldType name="textSimple" class="solr.TextField" >
          <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" />
          </analyzer>
        </fieldType>

  表示为solr添加mmseg4j的3种fieldType:  textComplex, textMaxWord, textSimple. 三种type对中文匹配的精确度不同,具体查google。

 

  然后在你需要做中文索引的field上用mmseg4j的type:

 

<field name="title" type="textComplex" indexed="true" stored="true" omitNorms="true"  />

 

7. Done 。