2

我最初在我的 solr 架构中创建了 3 个复制字段:

curl -X POST -H 'Content-type:application/json' --data-binary '{"add-copy-field": {"source":"company_name","dest":"_text_"}}' http://my-instance/solr/listing/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{"add-copy-field": {"source":"address","dest":"_text_"}}' http://my-instance/solr/listing/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{"add-copy-field": {"source":"city","dest":"_text_"}}' http://my-instance/solr/listing/schema

但是,我最近从架构中删除了这些,现在正在以稍微不同的格式编写查询。更高级的查询我们需要edismax。

但是,即使打开 edismax,我也会收到来自 solr 查询解析器的错误,如下所示。我是否通过删除复制字段破坏了某些内容?

/solr/listing/select?debugQuery=on&defType=edismax&q= %3A &stopwords=true

{
"responseHeader": {
"zkConnected": true,
"status": 400,
"QTime": 1,
"params": {
"q": "*:*",
"defType": "edismax",
"debugQuery": "on",
"stopwords": "true"
}
},
"error": {
"metadata": [
"error-class",
"org.apache.solr.common.SolrException",
"root-error-class",
"org.apache.solr.common.SolrException"
],
"msg": "org.apache.solr.search.SyntaxError: Query Field '_text_' is not a valid field name",
"code": 400
}
}

根据评论,“文本”字段保留在配置中的 3 个位置:

"/update/extract":{
    "startup":"lazy",
    "name":"/update/extract",
    "class":"solr.extraction.ExtractingRequestHandler",
    "defaults":{
      "lowernames":"true",
      "fmap.content":"_text_"}}


"spellchecker":{
      "name":"default",
      "field":"_text_",


"initParams":[{
    "path":"/update/**,/query,/select,/tvrh,/elevate,/spell,/browse",
    "defaults":{"df":"_text_"}}]
4

1 回答 1

2

根据对我的问题的评论(我仍在学习 solr):

尽管它们已经被弃用了很长一段时间,但 Solr 仍然支持基于 Schema 的配置 a <defaultSearchField/> (由df参数取代)和<solrQueryParser defaultOperator="OR"/>(由q.op参数取代。

如果您在 Schema 中指定了这些选项,强烈建议您用请求参数(或请求参数默认值)替换它们,因为将来的 Solr 版本可能会删除对它们的支持。

出于我们的目的,当我们使用 edismax 查询解析器时,我们需要指定我们想要使用的查询字段。

于 2019-11-26T15:36:36.493 回答