redis cli (работает правильно): < /p>
FT.SEARCH idx:products "@id:[12345 12345]" RETURN 4 id name price category
1) "1"
2) "product:electronics:12345"
3) 1) "id"
2) "12345"
3) "name"
4) "Laptop"
5) "price"
6) "999.99"
7) "category"
8) ""
< /code>
Конфигурация индекса redissearch Index: < /p>
// Create index for product data - each product is its own hash with prefix
CreateOptions productOptions = CreateOptions.builder()
.on(CreateOptions.DataType.HASH)
.prefix("product:") // Will index all hashes starting with "product:"
.build();
redisModulesCommands.ftCreate(
"idx:products",
productOptions,
Field.numeric("id").sortable().build(),
Field.text("name").sortable().build(),
Field.numeric("price").sortable().build(),
Field.text("category").build()
);
< /code>
java -код (возвращает пустые документы): < /p>
SearchResults results = redisModulesCommands.ftSearch(
"idx:products",
"@id:[12345 12345]",
SearchOptions.builder()
.returnFields("id", "name", "price", "category")
.build()
);
System.out.println("Count: " + results.getCount()); // Prints: Count: 1
if (results.getCount() > 0) {
Document doc = results.get(0);
System.out.println("Document: " + doc); // Prints: Document: {}
Map fields = new HashMap();
doc.forEach(fields::put);
System.out.println("Fields: " + fields); // Prints: Fields: {}
}
< /code>
Журналы отладки Show: < /p>
[lettuce-nioEventLoop-4-2] DEBUG io.lettuce.core.protocol.CommandHandler - Received: 382 bytes, 1 commands in the stack
12:27:22.100 [lettuce-nioEventLoop-4-2] DEBUG io.lettuce.core.protocol.RedisStateMachine - Decode done, empty stack: true
[type=SEARCH, output=SearchOutput [output=[{}, {}, {}], error='null']
< /code>
Конфигурация клиента: < /p>
RedisURI.Builder builder = RedisURI.builder()
.withSentinelMasterId("mymaster")
.withTimeout(Duration.ofMillis(3000));
// Add sentinel nodes
Arrays.stream("localhost:26379,localhost:26380".split(","))
.forEach(host -> {
String[] parts = host.trim().split(":");
String hostname = parts[0];
int port = parts.length > 1 ? Integer.parseInt(parts[1]) : 26379;
builder.withSentinel(hostname, port);
});
RedisModulesClient client = RedisModulesClient.create(clientResources, builder.build());
RedisModulesCommands redisModulesCommands = client.connect().sync();
< /code>
Среда: < /p>
- Lettuce-mod 3.8.1 < /li>
Java 1.8 < /li>
Redis sentinel setup < /li>
< /ul>
Прямая доступа работает. Map hashFields = commands.hgetall("product:electronics:12345");
// Returns: {id=12345, name=Laptop, price=999.99, category=""}
< /code>
Поиск находит правильное количество документов, но объекты документа полностью пусты. Та же самая команда поиска
отлично работает в Redis Cli. Является ли это известной проблемой с распределением перераспределения салата-мода, или я что-то упускаю
в моей конфигурации? < /P>
Что я пробовал: < /p>
Различные конфигурации Spearchoptions < /li>
. штраф) - подтвердил, что индекс существует и имеет правильную схему
Подробнее здесь: https://stackoverflow.com/questions/797 ... ly-via-red