渡されたキーに基づいて定数値を返す小さな関数クエリを作成しました。
最初のリクエストではうまく機能しますが、qk を変更すると、キャッシュされているため、実際には何も返されません。
solr がこの関数のクエリ結果をキャッシュしないように強制する方法、またはキャッシュの qk キーを作成する方法はありますか? qk を変更すると、再度検索されますか?
import java.io.IOException;
import java.util.Map;
import org.apache.lucene.index.IndexReader;
import org.apache.solr.search.function.DocValues;
import org.apache.solr.search.function.ValueSource;
public class ConstValueSource extends ValueSource {
final Map<String, Float> constants;
final String qk;
final String field;
public ConstValueSource(Map<String, Float> constants, String qk, String field) {
this.constants = constants;
this.qk=qk;
this.field=field;
}
public DocValues getValues(Map context, IndexReader reader) throws IOException {
return new DocValues() {
public float floatVal(int doc) {
return constants.get(qk);
}
public int intVal(int doc) {
return (int)floatVal(doc);
}
public long longVal(int doc) {
return (long)floatVal(doc);
}
public double doubleVal(int doc) {
return (double)floatVal(doc);
}
public String strVal(int doc) {
return Float.toString(floatVal(doc));
}
public String toString(int doc) {
return description();
}
};
}
@Override
public String description() {
return field + "_" + qk;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof ConstValueSource))
return false;
ConstValueSource other = (ConstValueSource) o;
return this.field.equals(other.field) && this.qk.equals(other.qk);
}
@Override
public int hashCode() {
return field.hashCode() * qk.hashCode();
}
}
これが私の値パーサーです
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.search.FunctionQParser;
import org.apache.solr.search.ValueSourceParser;
import org.apache.solr.search.function.ValueSource;
public class ConstSourceParser extends ValueSourceParser {
public void init(NamedList namedList) {}
public ValueSource parse(FunctionQParser fqp) {
try {
SolrParams paramters = fqp.getParams();
return new ConstValueSource(data, paramters.get("qk"), "qk");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
- 説明を更新してキャッシュをクリアすると、古いキャッシュに問題がありました。
応答でフィルタリングする方法はありますか?