2011-10-07 65 views
4

我要为下表结构创建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柱..

我有依赖为authorBrands

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 
} 

我得到的结果,如果我通过productName搜索,而不是authorbrand

我的目标是,如果用户搜索任何由productNameauthorbrand

请别人提供得到的结果我合适的配置..

谢谢..

回答

2

一种方法是只生成密钥

sql_query = SELECT CRC32(productID) AS id,... 

一个整数,因为你现在不能涉及这回真正的productID,你可以让你在查询结果拿回来存储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,... 
+0

谢谢你replay..its帮了我很多。我已经编辑我的问题。可以üPLZ提供商我配置.. –

+0

我承认不真的知道stackoverflow ettiquete但你添加的额外的东西是不相关的原始问题 - 所以应该开始一个新的问题。提示:应该可能使用sql_joined_field不是整数属性 – barryhunter