我想创建一个自定义的Solr FunctionQuery,这样我就可以得到字段的实际长度(以术语表示)。结果可能如下所示:
{
"responseHeader":{
"status":0,
"QTime":8,
"params":{
"q":"python",
"indent":"on",
"fl":"title,score,[features efi.query=python store=myfeature_store]",
"wt":"json"}},
"response":{"numFound":793,"start":0,"maxScore":0.33828905,"docs":[
{
"title":"Newest 'python' Questions - Stack Overflow",
"score":0.33828905,
"[features]":"titleLength=5"},
]
}}
我能找到的唯一有用的链接是this。但是它并没有很好地解释这个主题。我对Solr很陌生,所以逐步的过程会很有帮助。
编辑
我创建了一个名为count.js
的js脚本,如下所示:
function WordCount(str) {
return str.split(" ").length;
}
function processAdd(cmd) {
doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
var title = doc.getFieldValue("title");
var count = WordCount(title);
doc.setField("title_count", count);
logger.info("count-script#count: title_count=" + count);
}
function processDelete(cmd) {
// no-op
}
function processMergeIndexes(cmd) {
// no-op
}
function processCommit(cmd) {
// no-op
}
function processRollback(cmd) {
// no-op
}
function finish() {
// no-op
}
此外,我还在solrconfig.xml
中添加了以下条目:
<initParams path="/update/**">
<lst name="defaults">
<str name="update.chain">script</str>
</lst>
</initParams>
<updateRequestProcessorChain name="script">
<processor class="solr.StatelessScriptUpdateProcessorFactory">
<str name="script">count.js</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
我现在有几个问题:
1.要使此功能正常工作,我是否必须使用Nutch重新索引文档?
1.如何检查它是否工作?一个简单的solr查询会像http://localhost:8983/solr/nutch/select?indent=on&q=*:*&wt=json
一样工作吗?
1条答案
按热度按时间ttcibm8c1#
你可以使用更新请求处理器。有很多方法可以做到这一点。
请查看CountFieldValuesUpdateProcessorFactory
您基本上可以克隆字段并对其进行计数。但这仅在源字段是多值字段时有效。也就是说,在将其提供给Solr之前,您需要对它们进行标记化。您可以在SolrConfig.xml中配置此操作
但请记住,这要求您将“title”设置为多值字段,这可能并不理想。您可以设置一个类似于“title_multi”的附加字段,并屏蔽您的流程。
或者,您可以使用ScriptUpdateProcessor并在Javascript中执行计数逻辑。