需要高级搜索架构建议

时间:2012-03-27 11:49:54

标签: mysql advanced-search

我有一个充满项目的数据库,应该可以通过以下任何或所有标准进行搜索:

item_id, supplier, price range, color

现在,这很简单 - 用户选择的复选框已经过POST,我将其转换为适当的查询。

问题:如何使搜索动态修改自身。我的意思是 - 如果您选择某个价格范围,则从选择中删除所有不符合它的供应商和颜色,并且也取消选择任何选定的项目。

同样,如果用户检查某种颜色,则所有不提供颜色的供应商以及没有提供该颜色的所有价格范围都将从选择中删除。以及用户之前可能选择的所有项目,但不是那种颜色。

子问题:这是不是一个好主意,如果你反对它,请让我知道为什么?

注意:建筑建议是我所需要的,如何接近它,并且非常感谢答案,我对此持续了2天。

也不会拒绝代码,而且它可能是任何语言或伪代码,我需要解释这里的思维方式。

编辑:以下是一个示例 - 通过点击左侧的任何搜索条件,您会影响搜索结果:

http://www.wanajob.com/emploi?search=informatique&fpc=&fpr=

2 个答案:

答案 0 :(得分:2)

好像你在询问方面。虽然方面与你所要求的相反,但由于它们是相反的,你可以推断出要删除的内容。 Facets会告诉您,在搜索中,有X个蓝色,Y个红色和Z个黄色项目。因此,如果您使用其中一种颜色缩小搜索范围,则可以知道新搜索结果中的项目数量。这在网上很常见,特别是在购物网站上。所以有很多例子。

Solr,Elastic Search,Sphinx等搜索系统提供方面信息。 Mysql没有。 Solr是最成熟的,Elastic Search可能是最具扩展性的,而Sphinx可以直接从mysql中读取。

答案 1 :(得分:1)

我不是一个方面的专家,所以我顺从布伦特在这方面的答案,但你在MySQL中为你的基本搜索数据很容易实现。

假设客户搜索“红色”是颜色。然后,您可以在搜索结果中构建供应商列表和价格范围,例如

SELECT DISTINCT supplier FROM items WHERE color = 'red';
SELECT DISTINCT price_range FROM items WHERE color = 'red';

请注意,这些必须是单独的查询

SELECT DISTINCT supplier,price_range FROM items WHERE color = 'red';

将返回两个字段的所有DISTINCT组合。

如果您需要每个条件的COUNT,那么您可以使用GROUP BY

SELECT supplier,COUNT(*) FROM items WHERE color = 'red' GROUP BY supplier;
SELECT price_range,COUNT(*) FROM items WHERE color = 'red' GROUP BY price_range;
相关问题