让狮身人面像过滤搜索结果
我已经安装了Sphinx,目的是将它用于MySQL
表( InnoDB
)上的全文搜索。
表列包含一个id
(数字), name
和description
(这些都是全文索引;实际上还有一些,但为了简化问题...)和lang
(语言标识符)。
索引无任何问题,我获得了简单搜索的正确结果。
然而,当我尝试查询指定单词的name
和description
的同时,通过语言( lang
)过滤结果时,我遇到了麻烦。
我基本上喜欢达到相当于(说搜索的词组是'yerba'):
SELECT * FROM products
WHERE MATCH('yerba') AGAINST(name, description)
AND 'lang' == 'eng'
没有过于雄心勃勃,但我必须错过一些东西,因为我一直得到不正确的结果。 我正在使用Sphinx的PHP API:
$s = new SphinxClient();
$db = new DB();
$s->setServer('192.168.2.57', 9312);
$s->setMatchMode(SPH_MATCH_EXTENDED2);
$result = $s->query("@* yerba @lang eng");
print (count($result['matches']));
var_dump($s->GetLastError(),$s->GetLastWarning());
print '<pre>';
print_r($result);
print '</pre>';
返回20个匹配项:
20
string '' (length=0) // no error
string '' (length=0) // no warning
Array
(
[error] =>
[warning] =>
[status] => 0
[fields] => Array
(
[0] => lang
[1] => name
[2] => description
// snip...
)
[attrs] => Array
(
[lang] => 7
)
[matches] => Array
(
[568] => Array
(
[weight] => 6640
[attrs] => Array
(
[lang] => spa
)
)
[234] => Array
(
[weight] => 6630
[attrs] => Array
(
[lang] => pol
)
)
// snip
[total] => 44
[total_found] => 44
[time] => 0.000
[words] => Array
(
[yerba] => Array
(
[docs] => 44
[hits] => 238
)
[pol] => Array
(
[docs] => 715
[hits] => 772
)
)
)
很容易注意到,在它发现的第一个记录中, lang
是spa
,而不是eng
。
为什么??
配置文件( sphinx.conf
)如下所示 - source:
source src1
{
[...]
sql_query =
SELECT id, lang, name, description // snip!
FROM my_table
[...]
sql_field_string = lang
[...]
}
指数:
index test1
{
source = src1
[...]
min_word_len = 1
[...]
}
所有其他选项,除了数据库访问数据(正如我所说的那样工作正常)(对于未过滤的查询),都保留为默认值。
我一直试图破解这个坚果一段时间了。 我试着将lang
声明为sql_attr_string
,使用不同的匹配模式等等,都是徒劳的。
我有索引设置错了吗? 我在哪里搞砸了?
为了方便起见,我建议将语言从字符串字段更改为整数属性。
所以,你的查询将如下所示:
$s->SetFilter('lang', array(1)); //1 - eng
$s->Query('yerba');
你有这个...
$ result = $ s-> query(“@ * yerba @lang eng”);
然后...
[words] => Array
[yerba] => Array
[pol] => Array
你确定他们是同一个查询吗? “pol”不在您的查询中
否则检查字形/异常,也许你正在以某种方式改变你的文本......?
链接地址: http://www.djcxy.com/p/75263.html上一篇: Getting Sphinx to filter search results
下一篇: can these mysql fulltext queries be optimized/changed to run faster?