Ruby on rails 如何启用与“的部分匹配?”;轨道太阳黑子;?

Ruby on rails 如何启用与“的部分匹配?”;轨道太阳黑子;?,ruby-on-rails,sunspot-rails,Ruby On Rails,Sunspot Rails,我刚安装好太阳黑子轨道,除了一件事,它似乎工作得很好。 我录了3张像下面这样的唱片 姓名=约翰 name=John2 name=John3 当我用关键字“John”搜索时,只显示第一条记录。看起来完全匹配。 我希望所有这些都显示为搜索结果 这应该作为默认情况发生吗? 还是我设置错了???谢谢 来自女孩控制器的块(girls\u controller.rb) 来自女孩模型的块(Girl.rb) 如果希望在全文搜索中返回子字符串,可以查看 此外,您还可以添加一个文件sunspot_solr.rb,

我刚安装好太阳黑子轨道,除了一件事,它似乎工作得很好。 我录了3张像下面这样的唱片

  • 姓名=约翰
  • name=John2
  • name=John3
  • 当我用关键字“John”搜索时,只显示第一条记录。看起来完全匹配。 我希望所有这些都显示为搜索结果

    这应该作为默认情况发生吗? 还是我设置错了???

    谢谢

    来自女孩控制器的块(girls\u controller.rb)

    来自女孩模型的块(Girl.rb)


    如果希望在全文搜索中返回子字符串,可以查看

    此外,您还可以添加一个文件
    sunspot_solr.rb
    ,用于在myapp/config/initializers/中对结果进行分页:

    Sunspot.config.pagination.default_per_page = 100
    
    返回此案例的100个结果

    增加:

    您的
    schema.xml
    文件位于
    yourappfolder/solr/conf

    您还可以添加
    以匹配任意子字符串

    这是我对schema.xml的特定配置:

    <fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    <fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
        <filter class="solr.ISOLatin1AccentFilterFactory"/>
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ISOLatin1AccentFilterFactory"/>
        <filter class="solr.TrimFilterFactory" />
      </analyzer>
    </fieldtype>
    
    
    
    对我来说,它可以很好地处理所有关键字的完整字符串和子字符串。请不要忘记重新启动服务器并重新编制模型索引,以使更改生效。


    问候

    您是否可以发布您的模型和您的
    模型中的
    可搜索的
    块。在控制器中搜索
    块?x1a4,谢谢!我试过了,但在添加了他们要求的行之后,没有结果。真奇怪:(啊,谢谢。在我添加了“Sunspot.config.pagination.default_per_page=100”之后,它似乎成功了,但另一个问题出现了:(现在我成功地在子字符串中搜索了关键字,它是英语语言,但不是多字节的日语。在添加行之前,它一直工作得很好。嗯……如果按照该说明进行操作,搜索结果只能是其起始字符与关键字匹配的记录。而不是包含关键字的记录字符串的中间。太复杂了。谢谢。如果这个响应是有效的,你必须接受这个响应。对于特殊字符,你看我已经添加了任意子串的修复。谢谢。如果记录的字段从搜索关键字开始,它显示为搜索结果。但是如果搜索关键字包含在中间或中。字符串的末尾,没有记录命中。
    
    Sunspot.config.pagination.default_per_page = 100
    
    <fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    <fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
        <filter class="solr.ISOLatin1AccentFilterFactory"/>
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ISOLatin1AccentFilterFactory"/>
        <filter class="solr.TrimFilterFactory" />
      </analyzer>
    </fieldtype>