Solr新手在这里。
我创建了一个Solr索引并将一大堆文档写入其中。我可以看到 从Solr管理页面,文档存在,架构也很好。 但是当我使用测试关键字执行搜索时,我没有得到任何结果。
输入*:*
进入查询(在Solr管理页面中)我得到了所有结果。
但是,当我输入任何其他查询(例如术语或短语)时,我没有得到任何结果。 我已经验证正在查询的字段是索引并包含我要搜索的值。
所以我很困惑我做错了什么。
答案 0 :(得分:13)
可能您没有正确设置<defaultSearchField>
。请参阅this question。
另一种可能性:您的字段属于string
,而不是text
。与文本字段不同,字符串字段不会被分析,而是逐字存储和索引。
答案 1 :(得分:0)
我在使用 Solr 8 的新设置时遇到了同样的问题。接受的答案不再有效,因为<defaultSearchField>
配置将be deprecated。
由于我没有找到关于Solr为什么尽管被索引仍不从任何字段返回结果的答案,所以我查阅了查询文档。我发现的是DisMax查询解析器:
DisMax查询解析器旨在处理用户输入的简单短语(无复杂语法),并根据每个字段的重要性使用不同的权重(提升)在多个字段中搜索单个术语。其他选项使用户可以根据每种用例的特定规则(独立于用户输入)来影响得分。
相比之下,默认的Lucene解析器仅讲搜索一个字段。所以我尝试了一下DisMax,效果很好!
查询示例:
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video
您还可以指定要精确搜索的字段,以防止产生不必要的副作用。多个字段用空格分隔,这些空格在URL中转换为+
:
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&qf=features+text
最后但并非最不重要的一点是,为字段赋予权重:
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&qf=features^20.0+text^0.3
如果像我一样使用pysolr,则可以将这些参数添加到搜索请求中,如下所示:
results = solr.search('search term', **{
'defType': 'dismax',
'qf': 'features text'
})
答案 2 :(得分:0)
就我而言,问题在于查询的格式。默认情况下,我的设置似乎与该字段的整个值完全匹配。因此,为了在我搜索 sit
时获得结果,我必须查询 *sit*
,即使用通配符来获得预期结果。
答案 3 :(得分:-1)
使用solr 4,我必须根据Mauricio的答案解决这一问题,方法是将type="text_en"
定义为该字段。
答案 4 :(得分:-1)
使用solr 6,使用text_general。