具有多对多关系的狮身人面像索引
·
问题:具有多对多关系的狮身人面像索引
我正在尝试建立一个 Sphinx 索引,它在艺术品和流派之间具有基本的多对多关系:
artworks
---------------
id
title
description
genres
---------------
id
name
artwork_genres
---------------
artworks_id
genres_id
在我的狮身人面像配置文件中,我有类似的东西
source src_artwork {
...
sql_query = SELECT id, title, description FROM artworks
sql_attr_multi = uint tag from query; SELECT id,name FROM genres
}
据我所知,这是来自文档,关于多值属性和sql_attr_multi
但显然那里没有提到领带表,我无法理解它是如何被带入配置的。我只是想搜索“印象派”以产生属于该类型的艺术品(如果在其他领域看到该术语,则酌情加权)
解答
在这种情况下,我会考虑忽略属性功能。创建用于搜索艺术品的流派字段的最简单方法是将流派表“反规范化”到 sql_query 中。
在 SQL 查询的 FROM 子句中,您将通过链接表将流派表连接到艺术品。在 SELECT 子句中,您可以将 GROUP_CONCAT Genres.name 放入一个列中,该列成为要搜索的 Sphinx 字段。
您的 sql_query 可能如下所示:
source src_artwork {
...
sql_query = SELECT a.id, a.title, a.description, GROUP_CONCAT( DISTINCT g.name SEPARATOR ' ') AS genre \
FROM artworks AS a \
LEFT JOIN artwork_genres AS ag ON ag.artworks_id = a.id \
LEFT JOIN genres AS g ON g.id = ag.genres_id
GROUP BY a.id;
}
然后,在 @genre 字段中搜索“印象派”的艺术品的 sphinx 搜索将返回“行”。
更多推荐



所有评论(0)