我想创建sphinx搜索以下表结构:
CREATE TABLE IF NOT EXISTS `books` (
`productID` varchar(20) NOT NULL,
`productName` varchar(256) NOT NULL,
`ISBN` varchar(20) NOT NULL,
`author` varchar(256) DEFAULT NULL,
`productPrice` float(10,2) NOT NULL,
`discount` float(10,2) NOT NULL,
`brandID` int(11) NOT NULL,
`qty` int(11) NOT NULL,
`status` tinyint(1) NOT NULL,
PRIMARY KEY (`productID`),
KEY `status` (`status`),
KEY `ISBN` (`ISBN`),
KEY `author` (`author`),
KEY `brandID` (`brandID`),
KEY `books_index` (`productName`)
) ENGINE=innodb DEFAULT CHARSET=latin1;
我不能改变上表中的productID列.
我有作者和品牌的依赖表
CREATE TABLE IF NOT EXISTS `authors` (
`authorID` ini(11) NOT NULL,
`author_name` varchar(256) NOT NULL
PRIMARY KEY (`authorID`)
) ENGINE=innodb DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `brands` (
`brandID` ini(11) NOT NULL,
`brandName` varchar(256) NOT NULL
PRIMARY KEY (`brandID`)
) ENGINE=innodb DEFAULT CHARSET=latin1;
请一些人提供狮身人面像搜索的配置.
我正在使用以下配置.
source src1
{
type = mysql
sql_query = SELECT CRC32(productID) as productid,productID,productName,ISBN,brandID,author FROM sapna_ecom_products
sql_attr_uint = productID
sql_field_string = ISBN
sql_field_string = productName
sql_field_string = brandID
sql_attr_multi = uint brandID from field; SELECT brandID,brandName FROM sapna_ecom_brands
sql_attr_multi = uint author from field; SELECT authorID,author_name FROM sapna_ecom_authors
sql_query_info = SELECT productID,productName,ISBN,brandID,author FROM sapna_ecom_products WHERE CRC32(productID)=$id
}
如果我按产品名称搜索而不是作者和品牌搜索,我会得到结果
我的目的是在用户按产品名称或作者或品牌搜索时获得结果
请有人为我提供合适的配置..
谢谢..
最佳答案 一种方法是只生成一个整数键
sql_query = SELECT CRC32(productID) AS id,...
因为您现在无法将其与实际产品ID相关联,所以您可以将prodctID存储在属性中,以便将其恢复到查询结果中.
它可能会与CRC32发生冲突,
快速查询检查
CREATE TABLE test (id INT UNSIGNED NOT NULL PRIMARY KEY) SELECT CRC32(productID) FROM books;
如果这样可行,你很高兴,
如果没有,将不得不使用更好的哈希.也可以看看
http://greenash.net.au/thoughts/2010/03/generating-unique-integer-ids-from-strings-in-mysql/
Alternativly
sql_query_pre = SET @id := 1;
sql_query = SELECT @id := @id + 1 AS id,...