Gibt es eine Möglichkeit, das analyzer programmatisch zur Indizierung eines bestimmten Feldes durch die Elasticsearch-Serverinstanz über einen Client zu erhalten (vorausgesetzt, der Analyzer ist auf beiden Seiten verfügbar) , Na sicher)?Elasticsearch: Analysator zur Indizierung eines bestimmten Feldes von der Clientseite
Zum Beispiel mit einer Abbildung wie:
{
"mappings": {
"article": {
"properties": {
"text": {
"type": "string",
"index": "analyzed",
"analyzer": "spanish"
}
}
}
}
}
wie wäre es möglich, org.apache.lucene.analysis.es.SpanishAnalyzer
für das Feld zu bekommen text
mit the Java client for Elasticsearch, wie unten gezeigt?
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collections;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
public class QueryAnalyzerTest {
public static void main(final String[] args) throws UnknownHostException {
final String docTextFieldName = "text";
Iterable<SearchHit> hits = Collections.emptyList();
try (final Client client = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {
final QueryBuilder queryBuilder = QueryBuilders.matchQuery(docTextFieldName, "anuncio");
final SearchRequestBuilder searchRequestBuilder = client.prepareSearch("news").setQuery(queryBuilder)
.setTypes("article");
final SearchResponse response = searchRequestBuilder.get();
hits = response.getHits();
}
hits.forEach(hit -> {
final String docText = (String) hit.getSource().get(docTextFieldName);
// TODO: Tokenize "docText" with the exact same tokenizer used when
// indexing the field
});
}
}
Der erste Teil war Spot-on, aber leider habe ich keine 'AnalysisRegistry'-Klasse (Ich betreibe Elasticsearch 2.3.2); Hat sich die API geändert? – errantlinguist
Nein, aber wahrscheinlich, dass 'AnalysisRegistry' nicht in der Client-JAR enthalten ist, würde mich nicht überraschen. – Val
Haben Sie Glück dabei? Brauchen Sie weitere Informationen? – Val