Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr找不到搜索字符串_Solr_Sunspot_Sunspot Rails - Fatal编程技术网

Solr找不到搜索字符串

Solr找不到搜索字符串,solr,sunspot,sunspot-rails,Solr,Sunspot,Sunspot Rails,我正在运行一个rails应用程序sunspot solr和一个列名为name的城市表。有一个城市叫“埃门丁根”。我得到了“Emmendi”“Emmendin”“Emmendige”的结果,但没有得到名称本身“Emmendingen”的结果 在模型中,我像这样搜索 search(:include => :geo_name_admin_one_code) do any do fulltext(q, :fields=> [:name]) fulltext(q, :fie

我正在运行一个rails应用程序sunspot solr和一个列名为name的城市表。有一个城市叫“埃门丁根”。我得到了“Emmendi”“Emmendin”“Emmendige”的结果,但没有得到名称本身“Emmendingen”的结果

在模型中,我像这样搜索

search(:include => :geo_name_admin_one_code) do
  any do
    fulltext(q, :fields=> [:name])
    fulltext(q, :fields=> [:alternate_name])
  end
  with(:feature_class, 'P')
  order_by(:population,:desc)
  limit(10)
end
    <fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
    <filter class="solr.ReversedWildcardFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldType>
我的配置看起来像这样

search(:include => :geo_name_admin_one_code) do
  any do
    fulltext(q, :fields=> [:name])
    fulltext(q, :fields=> [:alternate_name])
  end
  with(:feature_class, 'P')
  order_by(:population,:desc)
  limit(10)
end
    <fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
    <filter class="solr.ReversedWildcardFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldType>


那么如何匹配确切的名称呢?

您的标记化索引表单不能超过10个字符。你已经修剪了两次,一次是用NGrams,一次是用EdgeNGrams(看起来非常错误)

您的查询没有修剪,因此您的11字字符与任何内容都不匹配


自行解决此问题的最简单方法是管理UI中的分析屏幕,您可以在其中输入索引和查询字符串,并查看发生了什么以及它们是否匹配。

我使用此配置解决了此问题

    <!-- *** This fieldType is used by Sunspot! *** -->
<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="2" maxGramSize="15" side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>