【问题标题】:Elasticsearch Java Api Set index settingsElasticsearch Java Api 设置索引设置
【发布时间】:2017-07-04 10:26:45
【问题描述】:

你好 Elasticsearchfriends。

我正在为按类型搜索的分析器而苦苦挣扎。我有一个 NodeFactory 并在那里创建了一个节点。比在我的 IndexService 类中,我索引了一个包含一些数据的整个 json 文件。我不是 Elasticsearch 专业人士,这就是为什么我想知道如何将设置添加到我的索引,或者我是否必须将设置添加到节点。

NodeFactory.java

@Component("es")
public class ElasticSearchNodeFactory implements FactoryBean<Node> {
private Node node;

public ElasticSearchNodeFactory() {
    System.out.println("hallo");
}

@Override
public Node getObject() throws Exception {
    return getNode();
}

@Override
public Class getObjectType() {
    return Node.class;
}

@Override
public boolean isSingleton() {
    return true;
}

private Node getNode() throws Exception {

    ImmutableSettings.Builder meineSettings = ImmutableSettings.settingsBuilder();
    meineSettings.put("node.name", "orange11-node");
    meineSettings.put("path.data", "/Users/lucaarchidiacono/IdeaProjects/moap2/MP3_MoapSampleBuild/data/index");
    meineSettings.put("index.store.type", "memory");
    meineSettings.put("http.enabled", false);
    Settings setting = meineSettings.build();
    node = NodeBuilder.nodeBuilder().local(true).data(true).clusterName("orange11-cluster").settings(setting).node();
    return node;
}
}

IndexService 类:

@Service
public class IndexService {
private Node node;
private Client client;

@Autowired
public IndexService(Node node) throws Exception {
    this.node = node;

    client = this.node.client();


    List<Map<String, Object>> data = jsonToMap();
    for (int i = 0; i < data.size(); ++i) {
        Map<String, Object> object = data.get(i);

        IndexRequest indexRequest = Requests.indexRequest("orange11").type("profile").id(Integer.toString(i)).source(object);
        IndexResponse indexResponse = client.index(indexRequest).actionGet();

        if (indexResponse != null && indexResponse.isCreated()) {
            System.out.println("Index has been created !");
            // read report from response
            System.out.println("------------------------------");
            System.out.println("Index name: " + indexResponse.getIndex());
            System.out.println("Type name: " + indexResponse.getType());
            System.out.println("ID: " + indexResponse.getId());
            System.out.println("Version: " + indexResponse.getVersion());
            System.out.println("------------------------------");
        } else {
            System.err.println("Index creation failed.");
        }
    }

}

public List<Map<String, Object>> jsonToMap() throws IOException {

    ObjectMapper mapper = new ObjectMapper();

    List<Map<String, Object>> listOfMaps = new ArrayList<Map<String, Object>>();

    Map<String, Object>[] jsonDocument = mapper.readValue(new File("/Users/lucaarchidiacono/IdeaProjects/moap2/MP3_MoapSampleBuild/data/index/accounts.json"), new TypeReference<HashMap<String, Object>[]>() {});

    for (int i = 0; i < jsonDocument.length; i++) {

        listOfMaps.add(i, jsonDocument[i]);
    }

    return listOfMaps;
}


}

【问题讨论】:

  • elasticsearch 版本是多少?
  • 这是 Elasticsearch 版本 1.7.0
  • 第一件事是您应该研究更新版本的弹性搜索。我认为 elasticsearch 1.x 即将结束。您应该尝试使用至少 2.x 版本。
  • 您是否尝试使用嵌入式弹性搜索节点?或者你有独立的弹性搜索服务器吗?
  • 我在一家公司工作,在那里我没有太多的可能性。他们只有 elasticsearch 1.7.0 。是的,我嵌入了 elasticsearch 节点。抱歉,版本较晚...

标签: java json elasticsearch indexing search-engine


【解决方案1】:

Here 是您可以将设置添加到嵌入式笔记的方法。

Node node =
    nodeBuilder()
        .settings(ImmutableSettings.settingsBuilder().put("http.enabled", false))
        .client(true)
    .node();

您可以按如下方式获取该嵌入式节点的客户端。 (如果你有对 Node 对象的引用)

Client client = node.client();

如果没有,您可以简单地创建新的传输客户端来进行查询。

Client client = new TransportClient()
        .addTransportAddress(new InetSocketTransportAddress("host1", 9300))
        .addTransportAddress(new InetSocketTransportAddress("host2", 9300));

然后您可以在创建时对索引进行设置,如下所示。

IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
        .setSource(jsonBuilder()
                    .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                    .endObject()
                  )
        .setSettings(ImmutableSettings.settingsBuilder().put("**whatever_setting_key**", **whatever_setting_value**))
        .execute()
        .actionGet();.

编辑:

您可以使用以下内容。

String json = "{" +
        "\"user\":\"kimchy\"," +
        "\"postDate\":\"2013-01-30\"," +
        "\"message\":\"trying out Elasticsearch\"" +
    "}";

// add your setting json here
String setting_json = "{" +
        "\"user\":\"kimchy\"," +
        "\"postDate\":\"2013-01-30\"," +
        "\"message\":\"trying out Elasticsearch\"" +
    "}";

IndexResponse response = client.admin().indices().prepareCreate("twitter")
        .setSource(json)
        .setSetting(setting_json)
        .execute()
        .actionGet();

【讨论】:

  • 在client.prepareIndex().setSource()中找不到setSettings()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
相关资源
最近更新 更多