Я использую Sphinx для поиска на веб-сайте, и я столкнулся с небольшим затруднением при возвращении соответствующих результатов.
Чтобы не усложнять мой вопрос, давайте предположим, что у меня есть два поля, @title и @body, которые имеют веса 100 и 15 соответственно. Когда я ищу маленькие слова, такие как слово ' in ', я хотел бы, чтобы он ранжировал точные совпадения для этого поискового запроса выше, а затем проверял совпадения на ' in * | * в | * в * 'и ранжировать их немного ниже. Есть ли способ придать этому типу специфичности ваши поиски?
Пример результатов для ' in ':
- Индийская еда
- В Середина
- Документ о латыни
Некоторые соответствующие настройки:
In sphinx.conf :
morphology = stem_en
charset_type = utf-8
min_word_len = 2
min_prefix_len = 0
min_infix_len = 2
enable_star = 1
In search.php
$sp->SetMatchMode( SPH_MATCH_EXTENDED2 );
$sp->SetRankingMode( SPH_RANK_PROXIMITY_BM25 );
$sp->SetFieldWeights ( array('title' => 100, 'body' => 15) );
Кроме того, как примечание: у меня также были случаи, когда частичные совпадения даже не отображаются в результатах поиска. Например, я искал Корова , но Ковбой не появляется в результате. Я также искал Cowb и Cowbo , и только когда я набрал Cowboy , я получил ожидаемый результат. Есть мысли?
Этот вопрос аналогичен этому предыдущему SO-вопросу , но я надеюсь, что немного подробнее рассказал о моей проблеме и о том, что я пытался найти решение.