使用Susnpot Gem进行Solr搜索

时间:2011-11-10 11:12:49

标签: ruby-on-rails search solr sunspot

我目前正在使用太阳黑子宝石在我的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应用程序中进行的查询相同的项目?

2 个答案:

答案 0 :(得分:3)

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

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

<defaultSearchField>text</defaultSearchField>

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

答案 1 :(得分:2)

扩展Jayendra的答案(基本上是正确的):

  

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

该查询是针对defaultSearchField运行的,默认情况下在太阳黑子中为text。然而,令人困惑的是,太阳黑子没有在text字段中添加任何内容,因此您的搜索结果是正确的。 test字段中没有包含text字词的文档,因为没有包含text字段的文档。

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

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

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