0

渡されたキーに基づいて定数値を返す小さな関数クエリを作成しました。

最初のリクエストではうまく機能しますが、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;
    }
  }
}
  • 説明を更新してキャッシュをクリアすると、古いキャッシュに問題がありました。

応答でフィルタリングする方法はありますか?

4

1 に答える 1