【发布时间】:2016-09-06 23:05:28
【问题描述】:
有没有办法通过客户端以编程方式获取 Elasticsearch 服务器实例用于索引给定字段的 analyzer(当然,假设分析器在双方都可用)?
例如,使用如下映射:
{
"mappings": {
"article": {
"properties": {
"text": {
"type": "string",
"index": "analyzed",
"analyzer": "spanish"
}
}
}
}
}
如何使用the Java client for Elasticsearch 为字段text 获取org.apache.lucene.analysis.es.SpanishAnalyzer,如下所示?
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
});
}
}
【问题讨论】:
标签: java elasticsearch lucene client analyzer