狮身人面像搜索中缀和不同领域的确切单词

时间:2015-05-07 10:34:00

标签: full-text-search search-engine sphinx

我正在使用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搜索,但需要两个词匹配。

有没有办法完成我的需要?

1 个答案:

答案 0 :(得分:1)

它有点棘手,但可以做到

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

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

相关问题