Elasticsearch Java Api 设置索引设置
Elasticsearch Java Api Set index settings
Elasticsearch 的朋友们大家好。
我正在为键入搜索分析器而苦恼。我有一个 NodeFactory 并在那里创建了一个节点。与在我的 IndexService class 中相比,我索引了一个包含一些数据的整个 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;
}
}
索引服务class:
@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;
}
}
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();
Elasticsearch 的朋友们大家好。
我正在为键入搜索分析器而苦恼。我有一个 NodeFactory 并在那里创建了一个节点。与在我的 IndexService class 中相比,我索引了一个包含一些数据的整个 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;
}
}
索引服务class:
@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;
}
}
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();