2 таблицы, 1 - таблица новостей, 2 - таблица тегов.

/etc/manticoresearch/tags.conf

Создал еще один конфигурационный файл

sudo -u manticore indexer --all --rotate

Не создает вторую таблицу, как то иначе нужно делать?

searchd {
    listen = 127.0.0.1:9312
    listen = 127.0.0.1:9306:mysql
    listen = 127.0.0.1:9308:http
    log = /var/log/manticore/searchd.log
    query_log = /var/log/manticore/query.log
    pid_file = /var/run/manticore/searchd.pid
    #data_dir = /var/lib/manticore
}

source sourcename {
  type        = mysql
  sql_host    = localhost
  sql_user    = ***
  sql_pass    = ***
  sql_db      = ***
  sql_query   = SELECT id, title, description FROM tags 
}

index indextags {
  type   = plain
  source = sourcename
  path   = /var/lib/manticore/indextags
  min_word_len  = 3 #Минимальная длина для индексации
  min_infix_len = 2 #Количество для опечатки при поиске, для каждого слова
}

При переиндексировании, читает только 1 файл - manticore.conf

using config file '/etc/manticoresearch/manticore.conf'...
indexing table 'indexnews'...
collected 4003 docs, 2.0 MB
creating secondary index
creating lookup: 4.0 Kdocs, 100.0% done
sorted 0.3 Mhits, 100.0% done
total 4003 docs, 2010331 bytes
total 0.648 sec, 3098628 bytes/sec, 6170.03 docs/sec
total 161 reads, 0.006 sec, 134.6 kb/call avg, 0.0 msec/call avg
total 23 writes, 0.005 sec, 327.9 kb/call avg, 0.2 msec/call avg
rotating tables: successfully sent SIGHUP to searchd (pid=1304).


Владельцы и права идинтичны.

sudo -u manticore indexer -c /etc/manticoresearch/tags.conf --all --rotate

Не знаю верно, но сделал все в одном файле, 2 таблицы. Работает, не могу разобраться в чем дело

index indextags {
  type   = plain
  source = sourcetags
  path   = /var/lib/manticore/indextags
  min_word_len  = 1 #Минимальная длина для индексации
  min_infix_len = 2 #Количество для опечатки при поиске, для каждого слова
}
SELECT `id`, `title`, `description`, `field`, WEIGHT() AS w FROM `indextags`
			WHERE MATCH('@title \"{$tg}\"/0.2 | @field all')
			ORDER BY `w` DESC
			LIMIT 10 OPTION ranker=proximity_bm25

Не работают отпечатки

финансы - находит
фииансы - не находит

Поиск работает по каждому слову
финансы финам - находит тег ‘финансы’ и теги у которых есть ‘финам’

  • добавляет оставшиеся теги по полю @field all

Хорошо, что не так делаю, что не работают опечатки?

Если добавить
morphology = lemmatize_ru

Выполнить поиск финанс, тег финансы не находит + автоматически включается

WARNING: table 'indextags': dict=keywords and prefixes and morphology enabled, forcing index_exact_words=1

Возможно сделать так, фраза:

финан фин

Выполнялся поиск так, как если бы было

%финан% %фин%

С учетом опечатков.

попробуйте option fuzzy=1

mysql> drop table if exists t; create table t(f text) min_infix_len='2'; insert into t values(1, 'финансы'),(2, 'фииансы'); select * from t where match('финансы') option fuzzy=1; select * from t where match('фииансы') option fuzzy=1;
--------------
drop table if exists t
--------------

Query OK, 0 rows affected (0.003 sec)

--------------
create table t(f text) min_infix_len='2'
--------------

Query OK, 0 rows affected (0.004 sec)

--------------
insert into t values(1, 'финансы'),(2, 'фииансы')
--------------

Query OK, 2 rows affected (0.001 sec)

--------------
select * from t where match('финансы') option fuzzy=1
--------------

+------+----------------+
| id   | f              |
+------+----------------+
|    1 | финансы        |
|    2 | фииансы        |
+------+----------------+
2 rows in set (0.002 sec)

--------------
select * from t where match('фииансы') option fuzzy=1
--------------

+------+----------------+
| id   | f              |
+------+----------------+
|    1 | финансы        |
|    2 | фииансы        |
+------+----------------+
2 rows in set (0.001 sec)