首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sphinx 3索引关系数据库

Sphinx 3索引关系数据库
EN

Stack Overflow用户
提问于 2021-03-30 15:08:19
回答 1查看 42关注 0票数 0

这是我的数据库计划:

代码语言:javascript
复制
Restaurants -> id, title
Categories  -> id, restaurant_id, type(enum: cafe, restaurant, fastfood, burger, chiness)
Reviews     -> id, restaurant_id, body

Review属于餐厅,属于多类别

我们如何查询属于一个类别的评论?

下面是当前的配置:

代码语言:javascript
复制
sql_query = select reviews.id as id, reviews.body as body, restaurants.url as url, restaurants.id as restaurant_id from reviews inner join restaurants on(restaurants.id = reviews.restaurant_id)

sql_attr_multi  = uint category_id from query; SELECT restaurant_id, categories.id as category_id FROM categories

问题在于sql_attr_multi --它用reviews.id代替了restaurant_id!它不知道restaurant_id在sql_attr_multi,它认为我们指的是reviews.id!

EN

回答 1

Stack Overflow用户

发布于 2021-04-01 16:53:56

首先,sql_attr_multi中的结果集中的第一列应该是主查询中的'document_id‘。在您的示例中,document_id是reviews.id,但似乎在MVA中使用restaruant_id。它不能匹配这样的任意属性。

所以实际上需要一些东西

代码语言:javascript
复制
sql_attr_multi = uint category_id from query; \
    SELECT reviews.id, categories.id as category_id \
    FROM categories \
    INNER JOIN reviews ON(reviews.restaurant_id = categories.restaurant_id) \
    ORDER BY reviews.id

若要获得执行联接的审阅id,请执行以下操作。分拆成行,使它更容易阅读。已经发现最好通过document_id对行进行明确的排序。

但这仍然不能让你通过‘类型’,即‘咖啡馆’等查询,因为你的'categories.id‘似乎是一个独特的id每家餐厅。(每一家咖啡馆都会有不同的categories.id!)

因此,实际上,您似乎希望“类型”作为MVA值。MVAs是数字(不是字符串),但幸运的是,枚举很容易转换成整数!

代码语言:javascript
复制
sql_attr_multi = uint category_type from query; \
    SELECT reviews.id, type+0 \
    FROM categories \
    INNER JOIN reviews ON(reviews.restaurant_id = categories.restaurant_id) \
    ORDER BY reviews.id

sql_attr_multi中的列名无关紧要,只使用第一列作为document_id,使用第二列作为MVA值。

THen知情咖啡厅(例如)是enum中的第一个值,它的1。(例如汉堡是4个)

代码语言:javascript
复制
SphinxQL> SELECT * FROM myindex WHERE MATCH('keyword') AND category_type = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66873600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档