SELECT `title`, `field`, WEIGHT() AS w
FROM `indexnews`
WHERE MATCH('@title \"авто\"/0.3 | @field all')
ORDER BY `w` DESC, `time` DESC
LIMIT 0, 20
OPTION ranker=proximity_bm25, fuzzy=1, layouts='us,ua', distance=2
SELECT *
FROM indexnews
WHERE MATCH('аввомобыли')
OPTION ranker=proximity_bm25, fuzzy=1, distance=2;
Работает, ок. 2 опечатки
SELECT *
FROM indexnews
WHERE MATCH('@title "аввомобыли"/0.3')
OPTION ranker=proximity_bm25, fuzzy=1, distance=2;
Нету результата
SELECT *
FROM indexnews
WHERE MATCH('@title \"Самый быстрый серийный\"/0.3')
OPTION ranker=proximity_bm25;
Есть результат
SELECT *
FROM indexnews
WHERE MATCH('@title \"Самый быстрый серийный\"/0.3')
OPTION ranker=proximity_bm25, fuzzy=1, distance=2;
Нет результата, опечатки не делал… Добавили: , fuzzy=1, distance=2
Пытаюсь выполнить так:
Находим все записи, схожет заголовка более 30%
proximity_bm25: делаем результат на приоритет близости искомых слов(если верно)
Допускаем по 2 опечатки на слово
index indexnews {
type = plain
source = sourcename
path = /var/lib/manticore/indexnews
morphology = lemmatize_ru,lemmatize_en,lemmatize_de
min_word_len = 3 #Минимальная длина для индексации
min_infix_len = 2 #Количество для опечатки при поиске, для каждого слова
# wordforms = /etc/manticoresearch/wordforms/indexname.wfs
}
Не повторяется на версии 14.1.0. Примеры ниже. Нужно больше деталей. В идеале - подобный “скрипт”, который демонстрирует проблему, начиная с create table
mysql> drop table if exists indexnews; create table indexnews(title text) min_infix_len='2'; insert into indexnews(title) values('автомобили'),('самый быстрый серийный'); SELECT * FROM indexnews WHERE MATCH('аввомобыли') OPTION ranker=proximity_bm25, fuzzy=1, distance=2; SELECT * FROM indexnews WHERE MATCH('@title "аввомобыли"/0.3') OPTION ranker=proximity_bm25, fuzzy=1, distance=2; SELECT * FROM indexnews WHERE MATCH('@title \"Самый быстрый серийный\"/0.3') OPTION ranker=proximity_bm25; SELECT * FROM indexnews WHERE MATCH('@title \"Самый быстрый серийный\"/0.3') OPTION ranker=proximity_bm25, fuzzy=1, distance=2;
--------------
drop table if exists indexnews
--------------
Query OK, 0 rows affected (0.001 sec)
--------------
create table indexnews(title text) min_infix_len='2'
--------------
Query OK, 0 rows affected (0.001 sec)
--------------
insert into indexnews(title) values('автомобили'),('самый быстрый серийный')
--------------
Query OK, 2 rows affected (0.000 sec)
--------------
SELECT * FROM indexnews WHERE MATCH('аввомобыли') OPTION ranker=proximity_bm25, fuzzy=1, distance=2
--------------
+---------------------+----------------------+
| id | title |
+---------------------+----------------------+
| 2309301764899209233 | автомобили |
+---------------------+----------------------+
1 row in set (0.002 sec)
--------------
SELECT * FROM indexnews WHERE MATCH('@title "аввомобыли"/0.3') OPTION ranker=proximity_bm25, fuzzy=1, distance=2
--------------
+---------------------+----------------------+
| id | title |
+---------------------+----------------------+
| 2309301764899209233 | автомобили |
+---------------------+----------------------+
1 row in set (0.001 sec)
--------------
SELECT * FROM indexnews WHERE MATCH('@title \"Самый быстрый серийный\"/0.3') OPTION ranker=proximity_bm25
--------------
+---------------------+--------------------------------------------+
| id | title |
+---------------------+--------------------------------------------+
| 2309301764899209234 | самый быстрый серийный |
+---------------------+--------------------------------------------+
1 row in set (0.000 sec)
--- 1 out of 1 results in 0ms ---
--------------
SELECT * FROM indexnews WHERE MATCH('@title \"Самый быстрый серийный\"/0.3') OPTION ranker=proximity_bm25, fuzzy=1, distance=2
--------------
+---------------------+--------------------------------------------+
| id | title |
+---------------------+--------------------------------------------+
| 2309301764899209234 | самый быстрый серийный |
+---------------------+--------------------------------------------+
1 row in set (0.002 sec)