搜索Sphinx中的哈希码

时间:2015-08-21 14:07:27

标签: search sphinx hashcode

我在数据库中有这种类型的哈希码: 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没有。我做错了什么?

1 个答案:

答案 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标记化一起工作,所以你编码的二进制字符串不太可能存活到正确的标记中)