索引和查询文档
了解如何使用 Redis 查询引擎处理 JSON 和 hash 文档。
此示例展示了如何为 JSON 文档创建搜索索引并对索引运行查询。然后继续展示了针对 hash 文档的等效代码中的细微差别。
初始化
确保您已安装 Redis 开源版或其他 Redis 服务器。如果您尚未安装 Jedis 客户端库,也请安装它。
添加以下依赖项。除 Path
和 JSONObject
类仅适用于 JSON 外(有关 JSON 路径语法,请参阅 Path),所有依赖项都适用于 JSON 和 hash。
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
创建数据
创建一些测试数据以添加到数据库中
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
添加索引
连接到您的 Redis 数据库。以下代码展示了最基本的连接,但请参阅 连接到服务器 了解更多可用的连接选项。
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
创建索引。在此示例中,仅对带有键前缀 user:
的 JSON 文档进行索引。更多信息请参阅 查询语法。
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
添加数据
将三组用户数据作为 JSON 对象添加到数据库中。如果您使用的键带有 user:
前缀,则 Redis 会在您添加对象时自动对其进行索引
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
查询数据
您现在可以使用索引搜索 JSON 对象。以下查询搜索任意字段中包含文本“Paul”且年龄值在 30 到 40 之间的对象
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
指定查询选项,仅返回 city
字段
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
使用聚合查询来统计每个城市中的所有用户。
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
与 hash 文档的区别
对 hash 文档进行索引与 JSON 索引非常相似,但您需要指定一些略微不同的选项。
创建 hash 索引的 schema 时,无需为字段添加别名,因为您仍然使用基本名称访问字段。此外,在创建索引时,必须为 FTCreateParams
的 On()
选项使用 IndexDataType.HASH
。以下代码展示了这些更改,其中包含一个名为 hash-idx:users
的新索引,该索引与前面示例中用于 JSON 文档的 idx:users
索引在其他方面相同。
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
使用 hset()
添加 hash 文档,而不是使用 jsonSet()
。
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
这里的查询命令对 hash 和 JSON 的作用方式相同(但 hash 索引的名称不同)。结果以 Document
对象列表的形式返回,与 JSON 类似
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.json.Path2;
import redis.clients.jedis.search.*;
import redis.clients.jedis.search.aggr.*;
import redis.clients.jedis.search.schemafields.*;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HomeJsonExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
JSONObject user1 = new JSONObject()
.put("name", "Paul John")
.put("email", "[email protected]")
.put("age", 42)
.put("city", "London");
JSONObject user2 = new JSONObject()
.put("name", "Eden Zamir")
.put("email", "[email protected]")
.put("age", 29)
.put("city", "Tel Aviv");
JSONObject user3 = new JSONObject()
.put("name", "Paul Zamir")
.put("email", "[email protected]")
.put("age", 35)
.put("city", "Tel Aviv");
SchemaField[] schema = {
TextField.of("$.name").as("name"),
TextField.of("$.city").as("city"),
NumericField.of("$.age").as("age")
};
String createResult = jedis.ftCreate("idx:users",
FTCreateParams.createParams()
.on(IndexDataType.JSON)
.addPrefix("user:"),
schema
);
System.out.println(createResult); // >>> OK
String user1Set = jedis.jsonSet("user:1", new Path2("$"), user1);
String user2Set = jedis.jsonSet("user:2", new Path2("$"), user2);
String user3Set = jedis.jsonSet("user:3", new Path2("$"), user3);
SearchResult findPaulResult = jedis.ftSearch("idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulResult.getTotalResults()); // >>> 1
List<Document> paulDocs = findPaulResult.getDocuments();
for (Document doc: paulDocs) {
System.out.println(doc.getId());
}
// >>> user:3
SearchResult citiesResult = jedis.ftSearch("idx:users",
"Paul",
FTSearchParams.searchParams()
.returnFields("city")
);
System.out.println(citiesResult.getTotalResults()); // >>> 2
for (Document doc: citiesResult.getDocuments()) {
System.out.println(doc.getId());
}
// >>> user:1
// >>> user:3
AggregationResult aggResult = jedis.ftAggregate("idx:users",
new AggregationBuilder("*")
.groupBy("@city", Reducers.count().as("count"))
);
System.out.println(aggResult.getTotalResults()); // >>> 2
for (Row cityRow: aggResult.getRows()) {
System.out.printf("%s - %d%n",
cityRow.getString("city"), cityRow.getLong("count"));
}
// >>> London - 1
// >>> Tel Aviv - 2
SchemaField[] hashSchema = {
TextField.of("name"),
TextField.of("city"),
NumericField.of("age")
};
String hashCreateResult = jedis.ftCreate("hash-idx:users",
FTCreateParams.createParams()
.on(IndexDataType.HASH)
.addPrefix("huser:"),
hashSchema
);
System.out.println(hashCreateResult); // >>> OK
Map<String, String> user1Info = new HashMap<>();
user1Info.put("name", "Paul John");
user1Info.put("email", "[email protected]");
user1Info.put("age", "42");
user1Info.put("city", "London");
long huser1Set = jedis.hset("huser:1", user1Info);
System.out.println(huser1Set); // >>> 4
Map<String, String> user2Info = new HashMap<>();
user2Info.put("name", "Eden Zamir");
user2Info.put("email", "[email protected]");
user2Info.put("age", "29");
user2Info.put("city", "Tel Aviv");
long huser2Set = jedis.hset("huser:2", user2Info);
System.out.println(huser2Set); // >>> 4
Map<String, String> user3Info = new HashMap<>();
user3Info.put("name", "Paul Zamir");
user3Info.put("email", "[email protected]");
user3Info.put("age", "35");
user3Info.put("city", "Tel Aviv");
long huser3Set = jedis.hset("huser:3", user3Info);
System.out.println(huser3Set); // >>> 4
SearchResult findPaulHashResult = jedis.ftSearch("hash-idx:users",
"Paul @age:[30 40]"
);
System.out.println(findPaulHashResult.getTotalResults()); // >>> 1
List<Document> paulHashDocs = findPaulHashResult.getDocuments();
for (Document doc: paulHashDocs) {
System.out.println(doc.getId());
}
// >>> user:3
jedis.close();
}
}
更多信息
有关所有查询功能的完整说明及示例,请参阅Redis 查询引擎 文档。