我正在使用sphinx作为搜索引擎,我需要能够在不同的字段中进行搜索,但是使用其中一个字段的中缀和另一个字段的确切字匹配。
简单示例:
我的来源为field_1的值为“abcdef”,而对于field_2的值为“12345”,我需要完成的是能够通过中搜索field_1和field_2中的确切字词。所以像“cde 12345”这样的搜索会返回我提到的文档。
在使用sphinx v2.0.4之前我只能通过在我的索引上定义infix_fields / prefix_fields来获得这些结果,但现在我正在使用v2.2.9和新的dict = keywords模式并且不推荐使用infix_fields。
我的索引定义:
index my_index : my_base_index
{
source = my_src
path = /path/to/my_index
min_word_len = 1
min_infix_len = 3
}
到目前为止,我已尝试以下列方式使用扩展查询语法:
$cl = new SphinxClient();
$q = (@(field_1) *cde* *12345*) | (@(field_2) cde 12345)
$result = $cl->Query($q, 'my_index');
这不起作用,因为对于每个字段,sphinx正在进行AND搜索并且其中一个单词不在指定字段中,“12345”在field_1上不匹配且“cde”在field_2中不匹配。此外,我不想进行OR搜索,但需要两个词匹配。
有没有办法完成我的需要?
答案 0 :(得分:1)
它有点棘手,但可以做到
$q = "((@field_1 *cde*) | (@field_2 cde)) ((@field_1 *12345*) | (@field_2 12345))"
(不需要@syntax中字段名称周围的括号 - 如果只有一个字段,为简洁起见将其删除)