0
votes

I'm using sphinx as search engine and I need to be able to do a search in different fields but using infix for one of the fields and exact word matches for another.

Simple example:

My source has for field_1 the value "abcdef" and for field_2 the value "12345", what I need to accomplish is to be able to search by infix in field_1 and exact word in field_2. So a search like "cde 12345" would return the doc I mentioned.

Before when using sphinx v2.0.4 I was able to obtain these results just by defining infix_fields/prefix_fields on my index but now that I'm using v2.2.9 with the new dict=keywords mode and infix_fields are deprecated.

My index definition:

index my_index : my_base_index
{
    source = my_src
    path = /path/to/my_index
    min_word_len = 1
    min_infix_len = 3
}

I've tried so far to use extended query syntax in the following way:

$cl = new SphinxClient();
$q = (@(field_1) *cde* *12345*) | (@(field_2) cde 12345)
$result = $cl->Query($q, 'my_index');

This doesn't work because for each field, sphinx is doing an AND search and one of the words is not in the specified field, "12345" is not a match on field_1 and "cde" is not a match in field_2. Also I don't want to do an OR search, but need the both words to match.

Is there a way to accomplish what I need?

1

1 Answers

1
votes

Its a bit tricky, but can do

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

(dont need the brackets around the field name in the @syntax - if just one field, so removed them for brevity)