有没有办法(查询)在ElasticSearch中加入以下2个JSON
{
product_id: "1111",
price: "23.56",
stock: "100"
}
{
product_id: "1111",
category: "iPhone case",
manufacturer: "Belkin"
}
Run Code Online (Sandbox Code Playgroud)
在Logstash中,在2种不同类型下处理(输入)2个JSON以上,因此它们的索引在Elasticsearch中提供了不同的"类型".
我想要的是在product_id字段上加入2个JSON.
我设计了一个简单的工作来从MySQL读取数据并将其保存在带有Spark的Elasticsearch中.
这是代码:
JavaSparkContext sc = new JavaSparkContext(
new SparkConf().setAppName("MySQLtoEs")
.set("es.index.auto.create", "true")
.set("es.nodes", "127.0.0.1:9200")
.set("es.mapping.id", "id")
.set("spark.serializer", KryoSerializer.class.getName()));
SQLContext sqlContext = new SQLContext(sc);
// Data source options
Map<String, String> options = new HashMap<>();
options.put("driver", MYSQL_DRIVER);
options.put("url", MYSQL_CONNECTION_URL);
options.put("dbtable", "OFFERS");
options.put("partitionColumn", "id");
options.put("lowerBound", "10001");
options.put("upperBound", "499999");
options.put("numPartitions", "10");
// Load MySQL query result as DataFrame
LOGGER.info("Loading DataFrame");
DataFrame jdbcDF = sqlContext.load("jdbc", options);
DataFrame df = jdbcDF.select("id", "title", "description",
"merchantId", "price", "keywords", "brandId", "categoryId");
df.show();
LOGGER.info("df.count : " + df.count());
EsSparkSQL.saveToEs(df, "offers/product");
Run Code Online (Sandbox Code Playgroud)
您可以看到代码非常简单.它将数据读入DataFrame,选择一些列,然后 …
elasticsearch apache-spark elasticsearch-hadoop apache-spark-1.5
假设我有下表:
`title`
- id
- name
- tv_series_id
Example:
id=1, name="Episode 2", tv_series_id=4
Run Code Online (Sandbox Code Playgroud)
我可以使用以下 JSON 结构轻松地将其映射到 ElasticSearch 中:
{
"ID": 1,
"Name": "Episode 2",
"TVSeriesID": 4
}
Run Code Online (Sandbox Code Playgroud)
如果我有第二个表,称为外键中引用tv_series
的title
表,例如:
`tv_series`
- id
- name
Example:
id=4, name='Friends'
Run Code Online (Sandbox Code Playgroud)
那么我将如何在 Elasticsearch 中映射这种关系?是否有一种通用方法可以在 Elasticsearch 中映射具有一个或多个外键关系的两个表?例如,通过执行某个连接语句?