Я хочу создать пользовательский 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 . Но это не очень хорошо объясняет топи c. Я очень новичок в Solr, поэтому пошаговая процедура будет полезна.
EDIT
Я создал js скрипт с именем count.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>
У меня есть несколько вопросов:
- Чтобы это работало, нужно ли переиндексировать документы с помощью Nutch?
- Как проверить, работает ли он? Будет ли простой запрос solr работать как
http://localhost:8983/solr/nutch/select?indent=on&q=*:*&wt=json
?