1

我无法让 ngrams 工作。这是我的 schema.xml:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />

  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
  </analyzer>
</fieldType>

我的数据库有一堆条目

“伊丽莎白”

“伊丽莎白”

当我尝试查询“伊丽莎白”时,我只得到“伊丽莎白”而不是“伊丽莎白”。奇怪的是,当我查看 solr 管理员时,分析页面显示 EdgenGramFilterFactory 确实可用,并导致“伊丽莎白”被扩展为

e el eli eliz eliza elizab elizabe elizabet 伊丽莎白

索引器似乎没有注意到这一点。当我将同义词过滤器从查询块移动到索引块时,我遇到了同样的问题。也就是说,当我在查询块中有同义词过滤器时,它可以工作,但是当我将它放在索引块中时,它就没有效果。

我已重新启动 Sunspot 并多次重新编制索引。没有骰子。有任何想法吗?如何直接查看索引词列表?

4

1 回答 1

2

我想我找到了问题,它看起来像一个菜鸟错误。

在我的模型中,是按照教程之一使用以下构造:

class Institution < ActiveRecord::Base
 .
 .
 .
end

Sunspot.setup(Institution) do
  text :name
end

当我开始、停止或重新编制索引时,这似乎没有引发任何错误。在停止 Solr 后我能够立即重新索引,这让我感到很奇怪。

我切换到

class Institution < ActiveRecord::Base
  .
  .
  .
  searchable do
    text :name
  end
endH

当我这样做时,我发现停止 Solr 后我无法重新索引。但是,当我启动 Solr 并重新编制索引时,索引似乎真正刷新了,我的查询最终表现如预期。

于 2011-04-09T01:53:04.547 回答