ScriptPlugin accès à la valeur du document

Comment fait on pour récupérer la valeur d'une propriété d'un document dans un script ?
J'ai des documents indexés :
personne{
nom,
prenom,
dateNaissance}

Je passe par un ScriptPlugin pour customiser le scoring de recherche d'un document.
Et j'ai besoin de comparer le test recherché (pour le nom par exemple) et le nom du document trouvé.
Comment accéder à la valeur d'une propriété du document trouvé ?

@Override
	public Function<Map<String, Object>, SearchScript> compile(String scriptName, String scriptSource, Map<String, String> params) {

		System.out.println(scriptName);
		System.out.println(scriptSource);
		// we use the script "source" as the script identifier
		if ("pure_df".equals(scriptSource)) {
			return p -> new SearchScript() {
				private List<String> nomsQuery;
				private String dateNaissQuery;
				{
					if (p.containsKey("nomsQuery") == false) {
						throw new IllegalArgumentException("Missing parameter [nomsQuery]");
					}
					if (p.containsKey("dateNaissQuery") == false) {
						throw new IllegalArgumentException("Missing parameter [dateNaissQuery]");
					}
					dateNaissQuery = p.get("dateNaissQuery").toString();
					nomsQuery = new ArrayList<String>(Arrays.asList(p.get("nomsQuery").toString().split(",")));
				}

				@Override
				public LeafSearchScript getLeafSearchScript(LeafReaderContext context) throws IOException {

					Terms docValues = context.reader().fields().terms("nom");					
					System.out.println(" docValues = " + docValues);

					return new LeafSearchScript() {

						@Override
						public void setNextAggregationValue(Object value) {
							// TODO Auto-generated method stub
							LeafSearchScript.super.setNextAggregationValue(value);
						}

						@Override
						public void setNextVar(String field, Object value) {
							// TODO Auto-generated method stub
							LeafSearchScript.super.setNextVar(field, value);
						}

						@Override
						public double runAsDouble() {

							System.out.println("runAsDouble");
							return 0;

						}



					};
				}

				@Override
				public boolean needsScores() {
					return false;
				}

			};
		}
		throw new IllegalArgumentException("Unknown script name " + scriptSource);
	}```

Bon alors j'ai tout faux, en fait dejà il faut se mettre dans la fonction "search"
Ensuite je pense qu'il faut utiliser

				final LeafSearchLookup leafLookup = lookup.getLeafSearchLookup(context);
				leafLookup.doc().get("nom");

Mais j'ai une IndexOutOfBoundsException ...

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.