【问题标题】:Apache Solr SearchApache Solr 搜索
【发布时间】:2025-11-28 23:00:01
【问题描述】:

我正在使用 Apache Solr 进行搜索。我使用数据导入处理程序从 mysql 表中导入数据。但是当我使用 q=KOHLI insted of q=lastname:KOHLI 时,我没有得到任何结果。

这是q=lastname:KOHLI的回复

{
  "responseHeader": {
      "status": 0,
      "QTime": 1,
      "params": {
      "q": "lastname:KOHLI",
      "indent": "true",
      "wt": "json",
      "_": "1427802213299"
    }
  },
  "response": {
     "numFound": 1,
     "start": 0,
     "docs": [
      {
        "lastname": "KOHLI",
        "town": "DELHI",
        "id": "2",
        "firstname": "VIRAT",
        "_version_": 1497158663291273200
      }
    ]
  }
}

schema.xml:

<copyField source="firstname" dest="text"/>
<copyField source="lastname" dest="text"/>
<copyField source="town" dest="text"/>
<field name="firstname" type="text_general" indexed="true" stored="true"/>
<field name="lastname" type="text_general" indexed="true" stored="true"/>
<field name="town" type="text_general" indexed="true" stored="true"/>`

【问题讨论】:

  • text 是你的 defaultSearchField 吗?
  • @alexf 是的,我想按名字、姓氏或城镇搜索。
  • 在您的 solrConfig.xml 中,您没有使用查询解析器?
  • @alexf 我不知道如何在 solrConfig.xml 中使用查询解析器,你能解释一下它是如何工作的吗?
  • 您可以阅读that。添加你的 solrConfig.xml 的 sn-p。

标签: apache solr


【解决方案1】:

当您没有为搜索指定字段时,它会搜索默认搜索字段。如果您想执行这样的搜索,您可以创建新字段并将所有其他要使其成为搜索目标的字段复制到该字段,然后将其设置为默认搜索字段。

这里有一些资源:

【讨论】:

  • 没关系,如果您发现它对您有用,请将其作为答案签名。 @Nagendra
【解决方案2】:

您是否使用查询解析器?如果是,在您的文件 solrconfig.xml 中,您在 requestHandler 中使用的查询字段是什么? (qf 参数)。如果您没有字段 lastname,这是正常行为。

如果您不使用查询解析器,那么在您的文件 schema.xml 中,您的 defaultSearchField 是什么?

你能添加你 Solr 文件的 sn-ps 吗?

【讨论】:

    【解决方案3】:

    这是因为您没有正确设置默认搜索字段。如果您没有在“q”中传递字段名称,它将搜索输入到您在项目配置文件中设置的默认字段。

    要设置默认字段,您可以这样做:

    1. 在您的 schema.xml 中,更改 &lt;defaultSearchField&gt;id&lt;/defaultSearchField&gt;&lt;defaultSearchField&gt;lastname&lt;/defaultSearchField&gt;

    2. 在您的 q 中使用 q={!type=dismax qf=lastname}KOHLI 运行(如果在 web 端口中,请删除“q=”)

    参考:

    查看查询类型简表

    https://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-4.9.pdf

    希望能有所帮助。谢谢。

    【讨论】: