这是我创建索引的方法
await redis.call('FT.CREATE', 'idx:business', 'SCHEMA',
'description', 'TEXT',
'location', 'GEO', 'SORTABLE',
'rating', 'NUMERIC', 'SORTABLE',
'sold', 'NUMERIC', 'SORTABLE'
);
await redis.call('FT.CREATE', 'idx:product', 'SCHEMA',
'description', 'TEXT',
'location', 'GEO', 'SORTABLE',
'rating', 'NUMERIC', 'SORTABLE',
'sold', 'NUMERIC', 'SORTABLE',
);
这是我的搜索方式:
const searchResults = await redis.call(
'FT.SEARCH',
'idx:product',
'@description:' + searchText + ' @location:[' + longitude + ' ' + latitude + ' ' + radius + ' km]',
'SORTBY', 'location', 'ASC',
'RETURN', 4, 'description', 'location', 'rating', 'sold'
);
问题是,搜索结果同时返回了
product
和 business
的数据
[
4,
'business:USER#[email protected]',
[
'location',
'101.80196018074508,2.93521259165689',
'description',
'Ayam Gunting Pakcik'
],
'product:USER#[email protected]##product#kepakayammadu123',
[
'location',
'101.80229411576097,2.9349018635560005',
'description',
'kepak ayam maduss',
'sold',
'5'
],
'business:USER#[email protected]',
[
'location',
'101.80229411576097,2.9349018635560005',
'description',
'Kepak Ayam Rambo',
'rating',
'3.45',
'sold',
'252'
],
'product:USER#[email protected]##product#bolayam11',
[
'location',
'101.80229411576097,2.9349018635560005',
'description',
'bebola ayam',
'rating',
'3.45',
'sold',
'247'
]
]
您将需要了解在创建索引时使用 PREFIX 选项。默认情况下,Redis 将为包含哈希值的all 字段建立索引。您需要告诉它哪个散列。这就是 PREFIX 的用途。
它的工作原理如下:
redis.cloud> FT.CREATE idx:business PREFIX 1 business: SCHEMA ...schema elided...
现在,任何以business:开头的哈希都将被添加到名为idx:business的索引中。
同样,对于产品:
redis.cloud> FT.CREATE idx:product PREFIX 1 product: SCHEMA ...schema elided...
当然,这假设包含企业和产品的哈希值位于以
business:
和 product:
开头的键中。根据需要调整。