如果一个业务需求需要使用 Left join 连接五张数据表进行搜索,通常情况下需要创建一份包含所有表中需要搜索的字段的索引。因为 Xunsearch 只支持单表索引,所以需要在应用层面进行 Left join 操作,将需要搜索的字段合并到一个表中,再使用 Xunsearch 创建索引。
导入数据可以通过以下步骤实现:
1.创建文档对象
$doc = new XSDocument();
$doc->setFields([
'id' => 1,
'title' => 'example',
'content' => 'this is an example',
// 其他需要搜索的字段
]);
2.添加文档到索引
$index->add($doc);
3.提交更新
$index->flushIndex();
底层原理:
Xunsearch 使用倒排索引存储文档信息和搜索关键词,每个索引只能包含一个文档类型的数据。因此,当需要搜索多张表中的数据时,需要将需要搜索的字段合并到一个表中,再使用 Xunsearch 创建索引。在合并字段时,可以使用 Left join 操作将多张表中的数据关联起来,并将结果写入到一个新的表中。然后,将新表中的数据导入到 Xunsearch 索引中,进行全文搜索。
在导入数据时,需要使用 Xunsearch 的文档对象将数据转换为 Xunsearch 索引中的文档格式,包含文档编号、文档内容和需要搜索的字段等信息。然后,将文档添加到索引中,Xunsearch 会使用倒排索引将文档中的关键词分词并加入到索引中。当执行搜索时,Xunsearch 会根据搜索关键词在倒排索引中查找匹配的文档,并返回搜索结果。