EdgeNgramFilter的solr重建索引问题

时间:2015-06-05 07:09:38

标签: solr ruby-on-rails-4.1 sunspot-rails sunspot-solr

我已经使用Solr搜索(太阳黑子宝石)创建了一个rails应用程序。它在我的本地系统中运行良好,但是当我部署到生产服务器时,我遇到了一个严重的问题。

当我运行重新索引命令RAILS_ENV=development bundle exec rake sunspot:solr:start时,它没有显示任何错误。它成功地重新索引数据。它还在管理员端显示所有数据都已正确重新编制索引。

但是当我搜索某些东西时,却没有给出正确的结果。当我在本地机器上执行相同的搜索查询时,它会给出正确的相关结果。

服务器中也有奇怪的行为:当我手动更改文件时,Solr开始停止而没有重新索引。然后它会给出正确的结果。

我使用以下命令重新索引solr RAILS_ENV=development bundle exec rake sunspot:solr:reindex

这是我的 schema.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
  <schema name="sunspot" version="1.0">
    <types>
      <fieldType name="string" class="solr.StrField" omitNorms="true"/>
      <!-- *** This fieldType is used by Sunspot! *** -->
      <fieldType name="tdouble" class="solr.TrieDoubleField" omitNorms="true"/>
      <!-- *** This fieldType is used by Sunspot! *** -->
      <fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/>
      <!-- *** This fieldType is used by Sunspot! *** -->

      <fieldType name="text" class="solr.TextField" omitNorms="false">
        <analyzer>
          <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s,\.;]+"/>
          <filter class="solr.StandardFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
          <charFilter class="solr.HTMLStripCharFilterFactory"/>
          <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
      </fieldType>

      <fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
          <tokenizer class="solr.KeywordTokenizerFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
          <tokenizer class="solr.KeywordTokenizerFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
      </fieldType>

      <fieldType name="text_ngram" class="solr.TextField" omitNorms="false">
        <analyzer>
          <tokenizer class="solr.StandardTokenizerFactory" />
          <filter class="solr.StandardFilterFactory" />
          <filter class="solr.LowerCaseFilterFactory" />
          <!-- <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\d+\(\)]" replacement=""/> -->
          <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
          <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" />
        </analyzer>
      </fieldType>

      <fieldType name="text_name" class="solr.TextField" omitNorms="false">
        <analyzer>
          <tokenizer class="solr.WhitespaceTokenizerFactory"/>
          <filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" splitOnNumerics="1" splitOnCaseChange="1" catenateWords="1"
      catenateNumbers="1" catenateAll="1" generateWordParts="1" generateNumberParts="1" stemEnglishPossessive="1" />
        </analyzer>
      </fieldType>

      <fieldType name="text_cit" class="solr.TextField" omitNorms="false">
        <analyzer>
          <tokenizer class="solr.StandardTokenizerFactory" />
          <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\b0+" replacement=""/>
          <filter class="solr.StandardFilterFactory" />
          <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
      </fieldType>
    </types>

0 个答案:

没有答案