Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Elasticsearch:从客户端获取用于索引给定字段的analyzer_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Lucene_Client_Analyzer - Fatal编程技术网 elasticsearch,lucene,client,analyzer,Java,elasticsearch,Lucene,Client,Analyzer" /> elasticsearch,lucene,client,analyzer,Java,elasticsearch,Lucene,Client,Analyzer" />

Java Elasticsearch:从客户端获取用于索引给定字段的analyzer

Java Elasticsearch:从客户端获取用于索引给定字段的analyzer,java,elasticsearch,lucene,client,analyzer,Java,elasticsearch,Lucene,Client,Analyzer,是否有一种方法可以通过客户端以编程方式获取Elasticsearch服务器实例用于索引给定字段的数据(当然,假设分析器在两侧都可用) 例如,使用映射,例如: { "mappings": { "article": { "properties": { "text": { "type": "string", "index": "analyzed

是否有一种方法可以通过客户端以编程方式获取Elasticsearch服务器实例用于索引给定字段的数据(当然,假设分析器在两侧都可用)

例如,使用映射,例如:

{
    "mappings": {
        "article": {
            "properties": {
                "text": {
                    "type": "string",
                    "index": "analyzed",
                    "analyzer": "spanish"
                }
            }
        }
    }
}
如下图所示,如何使用获取字段
text

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.net.InetAddress;
导入java.net.UnknownHostException;
导入java.util.Collections;
导入org.elasticsearch.action.search.SearchRequestBuilder;
导入org.elasticsearch.action.search.SearchResponse;
导入org.elasticsearch.client.client;
导入org.elasticsearch.client.transport.TransportClient;
导入org.elasticsearch.common.transport.InetSocketTransportAddress;
导入org.elasticsearch.index.query.QueryBuilder;
导入org.elasticsearch.index.query.QueryBuilders;
导入org.elasticsearch.search.SearchHit;
公共类查询分析测试{
公共静态void main(最终字符串[]args)引发UnknownHostException{
最终字符串docTextFieldName=“text”;
Iterable hits=Collections.emptyList();
try(final Client=TransportClient.builder().build())
.addTransportAddress(新的InetSocketTransportAddress(InetAddress.getByName(“localhost”),9300))){
final QueryBuilder QueryBuilder=QueryBuilders.matchQuery(docTextFieldName,“anuncio”);
final SearchRequestBuilder SearchRequestBuilder=client.prepareSearch(“新闻”).setQuery(queryBuilder)
.设定类型(“条款”);
final SearchResponse response=searchRequestBuilder.get();
hits=response.getHits();
}
hits.forEach(hit->{
最终字符串docText=(字符串)hit.getSource().get(docTextFieldName);
//TODO:使用完全相同的标记器标记“docText”,当
//为字段编制索引
});
}
}

使用
client().admin().index().prepareGetFieldMappings(“indexName”)
,您肯定可以通过编程方式获取
文本
字段的映射,并且您将能够检索分析器的逻辑名称(即“西班牙语”),但是,您无法获取分析器的类名


为此,您需要调用,您将获得正确的analyzer实例。

您肯定可以使用
client().admin().index().prepareGetFieldMappings(“indexName”)
以编程方式获取
文本
字段的映射,但是,您将能够检索analyzer的逻辑名称(即“西班牙语”),您将无法获取分析器的类名


为此,您需要调用,然后您将获得正确的analyzer实例。

第一部分是正确的,但不幸的是,我没有
AnalysisRegistry
类(我正在运行Elasticsearch 2.3.2);API改变了吗?没有,但是客户端JAR中可能没有包含
AnalysisRegistry
,这不会让我感到惊讶。这方面运气好吗?你需要更多的信息吗?不需要太多:我发现有一个
org.elasticsearch.index.analysis.AnalysisService
org.elasticsearch.index.analysis.AnalysisModule
,它们都是客户端可用的,但相关的实例似乎是由嵌入式Guice框架注入的;我仍然不知道如何获取这些注入的实例,甚至不知道它们是否在客户端。使用
AnalysisService.analyzer(“西班牙语”)
你什么也得不到?第一部分很准确,但不幸的是,我没有
AnalysisRegistry
类(我正在运行Elasticsearch 2.3.2);API改变了吗?没有,但是客户端JAR中可能没有包含
AnalysisRegistry
,这不会让我感到惊讶。这方面运气好吗?你需要更多的信息吗?不需要太多:我发现有一个
org.elasticsearch.index.analysis.AnalysisService
org.elasticsearch.index.analysis.AnalysisModule
,它们都是客户端可用的,但相关的实例似乎是由嵌入式Guice框架注入的;我仍然不知道如何获取这些注入的实例,甚至不知道它们是否在客户端?