我在数据库中有这种类型的哈希码: b67583fad7ccc238a34eacfcdc16bfd8557cc82f 它们都是40个字符。 从数据库中我得到了ID:
SELECT id FROM `table` WHERE info_hash=UNHEX('b67583fad7ccc238a34eacfcdc16bfd8557cc82f')
从MySql中输出whitout UNHEX()不起作用。所以我使用UNHEX()。
从Sphinx我试过了:
$cl->SetFilter('info_hash',array('UNHEX("b67583fad7ccc238a34eacfcdc16bfd8557cc82f")'));
等等
$cl->SetFilter('info_hash',array('HEX(UNHEX("b67583fad7ccc238a34eacfcdc16bfd8557cc82f"))'));
甚至如此
$result = $cl->Query('@info_hash "'.bin2hex("b67583fad7ccc238a34eacfcdc16bfd8557cc82f").'"',$index_name);
狮身人面像的配置:
sql_query = SELECT id,info_hash,name,cast FROM table_name
sql_field_string = name
sql_field_string = info_hash
sql_field_string = cast
对于场地演员我得到了ID:
$result = $cl->Query('@cast "Brad Pitt"',$index_name);
一切正常但是对于info_hash没有。我做错了什么?
答案 0 :(得分:0)
$ CL->使用setfilter( 'info_hash',阵列( 'UNHEX( “b67583fad7ccc238a34eacfcdc16bfd8557cc82f”)'));
不起作用,因为setFilter采用整数数组。另外还不清楚你认为谁将执行'UNHEX'功能,记住它的mysql函数!
php 确实有一个hex2bin
函数(相当于UNHEX()
),所以也许可以使用它。
由于您已将哈希值放在字符串属性中,因此可以使用
$cl->SetFilterString('info_hash',hex2bin("b67583fad7ccc238a34eacfcdc16bfd8557cc82f"));
请确保正确设置集合,以便您的binary
字符串得到推进。
http://sphinxsearch.com/docs/current.html#collations
(你也有一个字段,但很难匹配,因为它与charset_table标记化一起工作,所以你编码的二进制字符串不太可能存活到正确的标记中)