Как сделать так, чтобы sphinx искал каждый проиндексированный символ?
Здравствуйте!
Вот конфиг сфинкса:
docinfo = extern
index_exact_words = 1
min_infix_len = 1
morphology = stem_enru
min_word_len = 1
html_strip = 1
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+0401->U+0435, U+0451->U+0435
path = /var/sphinx/indexes/organization
source = organization
enable_star = 1
min_stemming_len = 1
}
В индексе сть строка "ООО тестовая организация"
пытаюсь найти "ооо те" - нет результатов
Находит только после того, как я ввожу третий символ.
мне нужно, что бы искалось даже если я введу один символ.
Как так сделать? Со звездочками пробовал разные варианты
Здравствуйте. А в какой версии Sphinx такая беда? В последних версиях и Sphinx и Manticore Search указанный конфиг должен позволять по "ооо те* и даже "ооо т* найти документ с "ООО тестовая организация" и даже по "ооо *ес*" найдется, а вот по "ооо *е*" не найдется, т.к. минимальное значение min_infix_len на самом деле 2 (в последних версиях при индексации про это показывается warning). Вот примеры:
[snikolaev@dev01 src]$ mysql -P9314 -h0
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 2.6.4 3d31c7c@180329 dev
Copyright (c) 2009-2017 Percona LLC and/or its affiliates
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select * from idx_min where match('ооо т*');
+------+------------------------------------------------+
| id | body |
+------+------------------------------------------------+
| 1 | ООО тестовая организация |
+------+------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from idx_min where match('ооо *ес*');
+------+------------------------------------------------+
| id | body |
+------+------------------------------------------------+
| 1 | ООО тестовая организация |
+------+------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from idx_min where match('ооо *е*');
Empty set (0.00 sec)
mysql> select * from idx_min where match('ооо те*');
+------+------------------------------------------------+
| id | body |
+------+------------------------------------------------+
| 1 | ООО тестовая организация |
+------+------------------------------------------------+
1 row in set (0.00 sec)
спасибо за ответ, но этот режим не подходит, т.к. будет искаться любое из слов "ооо" и "те", а мне нужно, что бы искалась конкретно эта подстрока "ооо те", чтобы вернулась "ООО тестовая организация", т.к. она содержит эту подстроку. При match any будут искаться строки, которые содержат "ООО", а их очень много и нужный результат затеряется среди них. Я не понимаю, почему при вводе "ООО те" не ищется, а при "ООО тес" ищется. Я предполагал, что при min_infix_len = 1 будут индексироваться все подстроки, начиная с длины 1 и вообще любая подстрока должна искаться