如何在solrconfig.xml中设置SOLR参数替换

时间:2015-06-25 13:07:44

标签: solr

这是我在stackoverflow的第一个问题,如果我违反任何规则,请提前道歉,但我确实研究了它们,并确保这不是一个重复的问题。

所以,根据这个http://yonik.com/solr-query-parameter-substitution/可以在solrconfig中设置一个搜索处理程序,其方式是

  

请求处理程序默认,附加和为其配置的不变量   handler可以引用请求参数

我有以下查询可以正常使用curl

curl http://localhost:7997/solr/vb_popbio/select -d 'q=*:*&fq=bundle:pop_sample_phenotype AND phenotype_type_s:"insecticide%20resistance"
&rows=0&wt=json&json.nl=map&indent=true
&fq=phenotype_value_type_s:${PFIELD}&
&PGAP=5&PSTART=0&PEND=101&PFIELD="mortality rate"&
json.facet = {
            pmean: "avg(phenotype_value_f)",
            pperc: "percentile(phenotype_value_f,5,25,50,75,95)",
            pmin: "min(phenotype_value_f)",
            pmax: "max(phenotype_value_f)",
            denplot : {
                type : range,
                field : phenotype_value_f,
                gap : ${PGAP:0.1},
                start: ${PSTART:0},
                end: ${PEND:1}
            }
    }'

我已将此查询转换为solrconfig.xml中的搜索处理程序配置,因此用户只需提供PFIELD,PGAP,PSTART和PEND参数。这里是处理程序的配置看起来如何

     <!--A request handler to serve data for violin plots (limited to IR assays)-->
<requestHandler name="/irViolin" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
         will be overridden by parameters in the request
      -->
    <lst name="defaults">
        <str name="echoParams">explicit</str>
        <int name="rows">0</int>
        <str name="df">text</str>
        <str name="wt">json</str>
        <str name="json.nl">map</str>
        <str name="json.facet">{
            pmean: "avg(phenotype_value_f)",
            pperc: "percentile(phenotype_value_f,5,25,50,75,95)",
            pmin: "min(phenotype_value_f)",
            pmax: "max(phenotype_value_f)",
            denplot : {
            type : range,
            field : phenotype_value_f,
            gap: ${PGAP:0.1},
            start: ${PSTART:0},
            end: ${PEND:1}
            }
            }
        </str>
    </lst>
    <lst name="appends">
        <str name="fq">bundle:pop_sample_phenotype</str>
        <str name="fq">phenotype_type_s:"insecticide resistance"</str>
        <str name="fq">has_geodata:true</str>
        <str name="fq">phenotype_value_type_s:${PFIELD:"mortality rate"}</str>

    </lst>
    <lst name="invariants">
    </lst>

</requestHandler>

请注意,我为所有参数提供了默认值,否则SOLR将无法加载配置。问题是使用像这样的查询

curl http://localhost:7997/solr/vb_popbio/irViolin?q=*:*&
    &PGAP=5&PSTART=0&PEND=101&PFIELD="mortality rate"

无效。 SOLR会很好地读取请求参数(我可以在调试输出中看到它们),但会忽略它们并使用配置中的默认值。

SOLR版本是5.2.1。

我尝试将配置参数移动到默认值,追加或不变量,但没有任何效果。在研究过去2天之后,我几乎已经准备好放弃,而是立即构建整个查询。

非常感谢任何帮助。

非常感谢

2 个答案:

答案 0 :(得分:1)

我认为(帖子)过旧,但是使用搜索引擎到达了此页面。一个简单的解决方案是转义美元符号。之后,您应该达到预期的效果。

示例: <str name="json.facet">{ pmean: "avg(phenotype_value_f)", pperc: "percentile(phenotype_value_f,5,25,50,75,95)", pmin: "min(phenotype_value_f)", pmax: "max(phenotype_value_f)", denplot : { type : range, field : phenotype_value_f, gap: $${PGAP:0.1}, start: $${PSTART:0}, end: $${PEND:1} } } </str>

答案 1 :(得分:0)

我不确定Config API何时来到Solr,但是当添加到configoverlay.json时查询参数替换 是否有效

{
  "requestHandler": {
     "/myHandler": {
       "name": "/myHandler",
        "class": "solr.SearchHandler",
        "defaults": {
           "fl": "id,name,color,size",
        },
       "invariants": {
          "rows": 10,
       },
       "appends": {
          "json": "{filter:[\"color:${color:red}\",\"size:${size:M}\"]}"
       }
    }
  }
}

现在,您可以将URL参数&amp; color = green&amp; size = XXL传递给/ MyHandler查询。