redis ft.search 在两个不同的索引中进行搜索

问题描述 投票:0回答:1

这是我创建索引的方法

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'
  ]
]
redis node-redis
1个回答
0
投票

您将需要了解在创建索引时使用 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:
开头的键中。根据需要调整。

© www.soinside.com 2019 - 2024. All rights reserved.