【问题标题】:Solr Search Using Susnpot Gem使用 Susnpot Gem 进行 Solr 搜索
【发布时间】:2011-12-26 02:10:31
【问题描述】:

我目前正在使用 sunspot gem 在我的 rails 应用程序中实现全文搜索。通过 Sunspot/Solr 在我的网站上进行的查询正在运行并返回正确的结果。但是,当我尝试使用 Solr 管理页面进行查询时,我很难显示结果。使用查询字符串*:* 我可以显示索引数据库中包含的所有结果,但我无法进行正确的查询。如果我尝试使用*:* 以外的字符串(例如test)进行查询,则不会返回任何结果,我只剩下:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">21</int>
    <lst name="params">
      <str name="explainOther"/>
      <str name="fl">*,score</str>
      <str name="indent">on</str>
      <str name="start">0</str>
      <str name="q">test</str>
      <str name="hl.fl"/>
      <str name="qt"/>
      <str name="wt"/>
      <str name="fq"/>
      <str name="version">2.2</str>
      <str name="rows">10</str>
    </lst>
  </lst>
  <result name="response" numFound="0" start="0" maxScore="0.0"/>
</response>

在实际的 rails 应用程序上使用字符串:test 进行相同的查询会返回 100 多个结果。

如何在 Solr 管理页面中进行查询返回与在 rails 应用程序中进行的查询相同的项目?

【问题讨论】:

    标签: ruby-on-rails search solr sunspot


    【解决方案1】:

    *:* 基本上会在所有字段上搜索 all,因此匹配所有文档。

    您在 Rails 应用程序中搜索哪个字段?
    默认情况下,通过 Solr 管理的查询在默认搜索字段 (schema.xml) 上触发。

    <defaultSearchField>text</defaultSearchField>
    

    尝试将您在 solr 上触发的查询更改为特定字段,例如q=some_field:test 并检查是否返回结果。

    【讨论】:

      【解决方案2】:

      稍微扩展一下 Jayendra 的回答(这基本上是正确的):

      如果我尝试使用*:* 以外的字符串进行查询,例如test,则不会返回任何结果...

      该查询针对defaultSearchField 运行,在Sunspot 中默认为text。然而,令人困惑的是,Sunspot 并没有在 text 字段中添加任何内容,因此您的搜索结果是正确的。在其text 字段中没有包含术语test 的文档,因为没有包含text 字段的文档。

      你可能有一个title_text 字段。您可以直接使用q=title_text:test 查询该字段。

      您还可以模仿 Sunspot 的查询:使用 DisMax 查询解析器,在 qf 中明确指定要查询的字段。如果您想查询多个文本字段,这很有帮助,更不用说接收 DisMax 的其他好处了:q=test&amp;defType=dismax&amp;qf=title_text+body_text

      此外,Sunspot 将其查询记录到 development.log,这是查找示例的好地方。

      【讨论】:

        猜你喜欢
        • 2014-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多