这是我在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天之后,我几乎已经准备好放弃,而是立即构建整个查询。
非常感谢任何帮助。
非常感谢
答案 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查询。