我的问题和这个一样—— Solr 指数似乎是有效的 - 但除了新宣布的 solr 7.3 之外,没有返回任何结果。
我创建了一个 Solr 索引,并在其中编写了一大堆文档。我可以从 Solr 管理页面看到文档存在并且架构也很好。但是当我使用测试关键字执行搜索时,我没有得到任何结果。
在查询中输入 * : * 时(在 Solr 管理页面中),我得到了所有结果。
但是,当我输入任何其他查询(例如术语或短语)时,我没有得到任何结果。我已经验证了正在查询的字段是否已编制索引,并且包含我正在搜索的值。
但是,Solr 7.3删除了新版本中的<defaultSearchField>
。有没有其他解决方案?如何使其搜索并从所有文档返回结果?
所以从 solr 7.3 开始,对默认字段的支持已被删除。
看这里 https://lucene.apache.org/solr/guide/7_3/major-changes-in-solr-7.html?hl=defaultSearchField#other-deprecations-and-removals
现在,当您在搜索时未指定字段时,没有要搜索的默认字段。 唯一的方法是使用 df 运算符。因此,在您的情况下,如果您希望在未指定字段的情况下进行搜索,则要搜索类别字段,请使用以下查询:
q=https://ip:port/select?q=apple&wt=json&df=category
因此,您需要在查询本身中指定默认字段。
现在的问题是是否要在所有字段中搜索。 您可以使用复制字段。
因此,您可以在 scheam 文件中创建一个复制字段。 复制未指定任何内容时要搜索的所有字段,然后在 DF 中使用该字段。
例如,在架构中定义一个名为文本的字段
<field indexed="true" name="_text_" type="text_general" multiValued="true" stored="false" />
现在为此定义一些复制字段。
<copyField source="category" dest="_text_" />
<copyField source="first_name" dest="_text_" />
然后在您的查询中,您可以这样做
q=https://ip:port/select?q=apple&wt=json&df=_text_
在此处阅读有关复制文件的更多信息: https://lucene.apache.org/solr/guide/7_3/copying-fields.html
请注意,尽管复制字段会复制数据,但它会增加索引大小。
生成的查询最好始终明确表示,但您仍然可以使用df
请求参数指定默认搜索字段。
使用dismax
解析器,您还可以在 solrconfig 中的 requestHandler 定义中为qf
参数指定默认值.xml(如果定义了qf
df
则不会生效)。
仍然值得注意的是,字段必须被索引为text
而不是string
才能正确搜索。