Sphinx 搜索不同领域的中缀和精确词

Sphinx search infix and exact words in different fields

我正在使用 sphinx 作为搜索引擎,我需要能够在不同的字段中进行搜索,但对其中一个字段使用中缀,对另一个字段使用精确词匹配。

简单示例:

我的来源 field_1 的值为 "abcdef",field_2 的值为 "12345",我需要完成的是能够通过 field_1 中的中缀和 field_2 中的确切单词进行搜索。所以像 "cde 12345" 这样的搜索会 return 我提到的文档。

在使用 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 和 [=36 不匹配=] 与 field_2 不匹配。我也不想做 OR 搜索,但需要两个词匹配。

有什么方法可以实现我的需求吗?

有点棘手,但可以做到

$q = "((@field_1 *cde*) | (@field_2 cde)) ((@field_1 *12345*) | (@field_2 12345))"

(@syntax 中字段名称周围不需要方括号 - 如果只有一个字段,为简洁起见将其删除)