Sphinx сортировка для автосаджеста

Koc

Новичок
Вопросец по сфинксу - делаем саджест, что-то типа WHERE MATCH('@title "*Моск*"') - как отсортировать так, что б сверху были строки, которые начинаются на Моск, а ниже что б были строки, в которые Моск просто входит?
 

Koc

Новичок
можно 2 запроса сделать, но это как-то совсем печально
 

fixxxer

К.О.
Партнер клуба
http://sphinxsearch.com/docs/2.0.6/weighting.html

Expression based ranker (SPH_RANK_EXPR)
...
min_hit_pos (integer), the position of the first matched keyword occurrence, counted in words. Indexing begins from position 1.

м?

ну то есть (min_hit_pos==1) * 100500 + формула_стандартного_rankerа, как то так.
 

Koc

Новичок
весьма похоже на то, что нужно. А как к этому еще добавить сортировку по алфавиту?
 

fixxxer

К.О.
Партнер клуба
я не понимаю, как можно отсортировать сразу и по релеватности и по алфавиту.

а если релевантность не важна, наверное sphinx тут вообще не в тему :)
 

Koc

Новичок
Че-то не работает
PHP:
mysql> SELECT *, WEIGHT() FROM idx_territorial_areas WHERE MATCH('@titles *моск*') OPTION ranker=expr('99999*sum((min_hit_pos==1))');
+-------+---------+-----------+-----------------------------------------------------------------+-----------------+----------+
| id    | type_id | parent_id | titles                                                          | has_coordinates | weight() |
+-------+---------+-----------+-----------------------------------------------------------------+-----------------+----------+
|    22 |       4 |       113 | Москва Moscow                                                   |               1 |    99999 |
|   113 |       3 |        20 | Московская область Moskovskaya oblastʹ                          |               1 |    99999 |
|   300 |       4 |        75 | Новомосковск Novomoskovsk                                       |               1 |    99999 |
|   789 |       6 |       115 | Московский Moskovskiy                                           |               1 |    99999 |
|   891 |       6 |       112 | Замоскворечье Zamoskvorechʹye                                   |               1 |    99999 |
|   922 |       6 |       108 | Москворечье-Сабурово Moskvorechʹye-Saburovo                     |               1 |    99999 |
|  1058 |       6 |       121 | Московский Moskovskiy                                           |               1 |    99999 |
| 17460 |       6 |       154 | Московский округ Moskovskiy okrug                               |               1 |    99999 |
| 17548 |       6 |       130 | Московский район Moskovskiy rayon                               |               1 |    99999 |
| 17554 |       6 |       139 | Московский район Moskovskiy rayon                               |               1 |    99999 |
| 17766 |       6 |       191 | Московский район Moskovskiy rayon                               |               1 |    99999 |
| 17983 |       6 |       196 | Московский район Moskovskiy rayon                               |               1 |    99999 |
| 18013 |       6 |       166 | Московский район Moskovskiy rayon                               |               1 |    99999 |
| 18029 |       6 |       121 | Московский район Moskovskiy rayon                               |               1 |    99999 |
| 18696 |       4 |      1098 | Новомосковск Novomoskovsk                                       |               1 |    99999 |
| 18854 |       6 |       706 | Московский район Moskovskiy rayon                               |               1 |    99999 |
+-------+---------+-----------+-----------------------------------------------------------------+-----------------+----------+
16 rows in set (0.00 sec)
 

fixxxer

К.О.
Партнер клуба
Почему, работает, корень слова совпадает. Если не нужен стеммер - ну так выключи!
 

Koc

Новичок
морфология отключена. Мне нужно что б Новомосковск был ниже Московский
 

fixxxer

К.О.
Партнер клуба
А зачем вообще для саджеста пытаться использовать сфинкс? Нафига тут полнотекстовый поиск? Это обычный же поиск по подстроке, то есть, фактически, фуллскан. Какой-нибудь монгой куда уместнее.
 

Koc

Новичок
х3, думал типа быстрее будет. А чем монга здесь будет лучше mysql like?
 

fixxxer

К.О.
Партнер клуба
мыскль не умеет сортировку и группировку на лету, будет filesort/temporary table/или даже оба, в зависимости от

вообще единственное что mysql хорошо умеет это ходить по btree, во всех остальных случаях его лучше не использовать :D
 
Сверху