С нами с 31.10.03
Сообщения: 730
Рейтинг: 336
|
Добавлено: 05/10/15 в 09:41 |
Всем привет. Есть спецы по работе с ним?
Вопрос по Sphinx API for PHP.
В индексе лежит:
1 | teen anal
2 | teen masturbate
3 | anal fisting
4 | teen
5 | anal
ищем по "teen anal":
$cl->SetMatchMode( SPH_MATCH_ANY );
$result = $cl->Query("teen anal");
На выходе в результатах получаем только
1 | teen anal
Вопрос: как получить еще и
2 | teen masturbate
3 | anal fisting
4 | teen
5 | anal
- вроде же одно из слов содержится у элемента в индексе?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 05/10/15 в 13:45 |
$result = $cl->Query("teen anal");
название индекса укажи, так
$result = $cl->Query("teen anal", "yourIndex");
мало инфы, конфиг сюда скинь
можно веса еще указать
Цитата: |
$cl->SetFieldWeights(array ('keywords' => 10, 'title' => 20, 'description' => 10));
|
|
|
|
|
С нами с 06.07.15
Сообщения: 110
Рейтинг: 171
|
Добавлено: 06/10/15 в 14:18 |
Должно работать..
а если teen задать точно всех teen выдаст ?
|
|
|
|
С нами с 31.10.03
Сообщения: 730
Рейтинг: 336
|
Добавлено: 19/10/15 в 13:40 |
Примерно вот такой конфиг:
Код: [развернуть] | source pictures : te_db
{
sql_query = \
SELECT \
p.id, c.title category_title, GROUP_CONCAT(ch.name SEPARATOR ' ') names, GROUP_CONCAT(tags_names.name SEPARATOR ' ') tags, IF(p.is_animated=1, 'gif', '') gif, p.filename, p.source, p.item_weight, p.hash, p.added date, p.mime, 'picture' item_type \
FROM \
pictures p \
LEFT JOIN categories c ON p.category_id=c.id \
LEFT JOIN tags ON tags.item_id = p.id AND tags.item_type = 'picture' \
LEFT JOIN tags_ids ON tags_ids.id = tags.tag_id \
LEFT JOIN characters ch ON ch.id = tags_ids.tag_id AND tags_ids.tag_type = 'character' \
LEFT JOIN tags_names ON tags_names.id = tags.tag_id AND tags_ids.tag_type = 'common' \
WHERE p.status = 1 AND c.status IN(1,4,5) AND p.gallery_id IN (SELECT base_gallery_id FROM categories) \
GROUP BY tags.item_id, p.id;
sql_attr_string = item_type
sql_attr_float = item_weight
sql_attr_string = hash
sql_attr_string = mime
sql_attr_string = date
sql_attr_string = category_title
sql_attr_string = names
sql_attr_string = tags
sql_ranged_throttle = 0
}
index pictures
{
source = pictures
path = /usr/local/var/data/pictures # Distribution Dependant, VALIDATE
docinfo = extern
mlock = 0
morphology = none
index_exact_words = 1
min_word_len = 2
html_strip = 1
} |
получается ~100к вхождений
делаю вот такой поиск:
Код: [развернуть] |
$cl = new \Sphinx\SphinxClient();
$cl->SetServer(SPHINX_IP, SPHINX_PORT );
$cl->SetConnectTimeout(1);
$cl->SetArrayResult (true);
$cl->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
$cl->SetMatchMode(SPH_MATCH_EXTENDED);
$result = $cl->Query("detective", "pictures");
|
Ничего не находит. Делаю indexer --dump-rows, открываю результат, ручками ищу detective - все находит:
Код: [развернуть] | INSERT INTO rows_pictures VALUES ('526419', 'Detective Conan', 'Ran Mouri', '', '', '1465234%20-%20Detective_Conan%20Ran_Mouri%20Sonoko_Suzuki.jpg', '', '0', 'a43b12829c0c067bfc97af04ec6dabcb', '2014-10-24 05:52:22', 'jpg', 'picture');
INSERT INTO rows_pictures VALUES ('526593', 'Detective Conan', 'Ran Mouri', '', '', '1313029%20-%20Detective_Conan%20Ran_Mouri.jpg', '', '3', 'b3444ae8268748fc1b292e0ac89b69c5', '2014-10-24 06:42:16', 'jpg', 'picture');
INSERT INTO rows_pictures VALUES ('526595', 'Detective Conan', 'Ran Mouri', '', '', '1310998%20-%20Detective_Conan%20Ran_Mouri.jpg', '', '0', 'c07adc83a71cb9b574049ed21ad101c1', '2014-10-24 06:42:26', 'jpg', 'picture'); |
От чего такое может быть?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 19/10/15 в 13:56 |
веса пробовал указывать?
Код: [развернуть] |
$cl->SetFieldWeights(array ('category_title' => 100));
|
в запросе конфига вижу
c.title category_title,
names, tags
то есть поиск по категориям - тегам?
а сам title записи не задействован?
|
|
|
|
С нами с 31.10.03
Сообщения: 730
Рейтинг: 336
|
Добавлено: 19/10/15 в 15:37 |
Sterx писал: | веса пробовал указывать?
Код: [развернуть] |
$cl->SetFieldWeights(array ('category_title' => 100));
|
|
не, не помогло...
Sterx писал: |
в запросе конфига вижу
c.title category_title,
names, tags
то есть поиск по категориям - тегам?
а сам title записи не задействован? |
У каждой пикчи есть айди категории, заголовок категории идет в поле c.title.
А еще у каждой пикчи в отдельной таблице есть записи, типа,
tag_name1, item_id1
tag_name2, item_id1
tag_name3, item_id1
char_name1, item_id1
char_name2, item_id1
char_name3, item_id1
Они все собираются через concat_group в tags и names
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 19/10/15 в 15:50 |
тогда могу предположить что записи вида
1 | teen anal
2 | teen masturbate
3 | anal fisting
4 | teen
5 | anal
движку не нравятся, чисто тектовый формат поместить в индекс не вариант?
|
|
|
|
С нами с 31.10.03
Сообщения: 730
Рейтинг: 336
|
Добавлено: 20/10/15 в 05:14 |
Типа, собрать все данные в одно поле и по нему поиск делать? Это имеешь в виду?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 20/10/15 в 08:28 |
можно и так.
я не для сфинкса , а просто для полнотекстового поиска мускуля собирал такие солянки - desc+tags+cats - и по релевантности выдавал
|
|
|
|
С нами с 31.10.03
Сообщения: 730
Рейтинг: 336
|
Добавлено: 20/10/15 в 09:46 |
А match against не сильно ли подгрузит сервер при большом количестве поисковых запросов?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 20/10/15 в 12:26 |
сильно
|
|
|
|
С нами с 31.10.03
Сообщения: 730
Рейтинг: 336
|
Добавлено: 21/10/15 в 09:24 |
Короче, все оказалось проще Трабла в конфиге была.
Конкретно с директивой sql_attr_string:
http://sphinxsearch.com/docs/current/conf-sql-attr-string.html
Код: | ...
Starting from 2.0.1-beta string attributes can be used for sorting and grouping(ORDER BY, GROUP BY, WITHIN GROUP ORDER BY). Note that attributes declared using sql_attr_string will not be full-text indexed; you can use sql_field_string directive for that. |
Неделя мучений, а надо было просто выспаться...
|
|
|
|