我目前正在使用太阳黑子宝石在我的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应用程序中进行的查询相同的项目?
答案 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
,这是查找示例的好地方。