avalon
avalon

Reputation: 2291

postgres sphinx search order

I have a postgres install with Sphinx and when I run query I want that most relevant records to be selected first. In other words, I want the following query first:

query="word1 & word2 & word3"

and then, if nothing selected,

query="word1 | word2 | word3"

How to configure sphinx for that needs? Sphinx config is default

Upvotes: 0

Views: 204

Answers (1)

barryhunter
barryhunter

Reputation: 21091

Well https://github.com/andy128k/pg-sphinx says

sphinx_select(
/*index*/     varchar,
/*query*/     varchar,
/*condition*/ varchar,
/*order*/     varchar,
/*offset*/    int,
/*limit*/     int,
/*options*/   varchar)

And from http://sphinxsearch.com/docs/current.html#sphinxql-select you want a OPTIONS clause to change the ranking (a ranker option)

http://sphinxsearch.com/docs/current.html#weighting

So would try

sphinx_select(...., "word1 | word2 | word3", ..., "ranker=wordcount")

(edited to show the query in place too, need the OR query for this to work! see comments above)

(wordcount ranker, is very basic, but should do the exact criteria you want)

But can play with custom expressions, not great, but get you started...

sphinx_select(....,  "ranker=expr('sum(word_count+hit_count+lccs+exact_order)+bm25')")

MUCH more detail... http://sphinxsearch.com/blog/2010/08/17/how-sphinx-relevance-ranking-works/

Upvotes: 1

Related Questions