blend characters must not be referenced anywhere else

Добрый день!

Подскажите, пожалуйста,

Я использую расширение для Mediawiki
https://www.mediawiki.org/wiki/Extension:SphinxSearch

при индексировании данных из mysql там добавляется игнорирование подчёркивания
blend_chars = U+005F
это делается из-за того, что названия страниц хранятся в базе без пробелом, с подчёркиванием между словами.

На Сфинксе 2.x всё работает хорошо, но на Manticore я получаю ошибку

FATAL: index ‘wiki_palomnik_main’: ‘blend_chars’: blend characters must not be referenced anywhere else (code=U+5f)

Я пытался объехать так:
regexp_filter = [_] => .
но он заменяет в запросе page_title
SELECT * FROM wiki_palomnik_main WHERE MATCH(’@page_title: ^название*’)
и получается ошибка query error: no field ‘page’ found in schema

Я предполагаю, что лучше делать необходимое преобразование в запросе, получающем данные из базы mysql.

Но хотелось бы разобраться, что за ошибка «blend characters must not be referenced anywhere else».

покажите ваш конфиг индекса, тогда будет понятно, где замаплен этот символ

blend_chars = U+005F дефолтам Мантикор не противоречит:

mysql> create table t(f text) blend_chars='U+005F';
Query OK, 0 rows affected (0.01 sec)

mysql> call keywords('abc_def', 't');
+------+-----------+------------+
| qpos | tokenized | normalized |
+------+-----------+------------+
| 1    | abc_def   | abc_def    |
| 1    | abc       | abc        |
| 2    | def       | def        |
+------+-----------+------------+
3 rows in set (0.00 sec)

Просто нельзя тот же символ указывать и в качестве blended и в качестве обычного. Пример:

mysql> create table t(f text) blend_chars='U+005F' charset_table='a,b,c,U+005F';
ERROR 1064 (42000): error adding index 't': 'blend_chars': blend characters must not be referenced anywhere else (code=U+5f)

Скачал extension. Про blend_chars там ничего не нашёл. Нашёл charset_table, но подчёркивания там тоже нет.

index wiki_palomnik_main
{
source = src_wiki_palomnik_main
path = /var/lib/manticore/wiki_palomnik_main # index file name without extension
#docinfo = extern
morphology = lemmatize_ru
#stopwords = /var/lib/manticore/stopwords.txt
min_word_len = 2
min_infix_len = 3 # for wildcard (*) searches
expand_keywords = 1 # +
index_exact_words = 1 # + rank exact word matches higher
# TODO
#blend_chars = , &, -
#regexp_filter = [
&-] => .
}

У меня индекс создаётся записью в конфиге, и там я явно не задаю charset_table.

Ошибку с вашим конфигом индекса повторить не получается:

snikolaev@dev:~/lav$ cat manti.conf
common {
    lemmatizer_base = ..
}

source src_wiki_palomnik_main {
    type = csvpipe
    csvpipe_command = echo "1,abc" && echo "2,abc" && echo "3,abc_def"
    csvpipe_field = f
}

index wiki_palomnik_main
{
source = src_wiki_palomnik_main
path = wiki_palomnik_main # index file name without extension
#docinfo = extern
morphology = lemmatize_ru
#stopwords = /var/lib/manticore/stopwords.txt
min_word_len = 2
min_infix_len = 3 # for wildcard (*) searches
expand_keywords = 1 # +
index_exact_words = 1 # + rank exact word matches higher
# TODO
#blend_chars = , &, -
#regexp_filter = [&-] => .
}
snikolaev@dev:~/lav$ indexer -c manti.conf --all
Manticore 3.6.0 96d61d8@210504 release (columnar 1.0.0 768b007@210503)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2021, Manticore Software LTD (https://manticoresearch.com)

using config file 'manti.conf'...
indexing index 'wiki_palomnik_main'...
collected 3 docs, 0.0 MB
creating lookup: 0.0 Kdocs, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 3 docs, 13 bytes
total 0.251 sec, 51 bytes/sec, 11.91 docs/sec
total 80 reads, 0.001 sec, 120.0 kb/call avg, 0.0 msec/call avg
total 13 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
snikolaev@dev:~/lav$

Извините, я в конфиге закомментировал строку
blend_chars = _ , &, -

С ней ваш конфиг даёт ошибку:
$ indexer --quiet --rotate --config /etc/manticoresearch/manticore.conf wiki_palomnik_main
FATAL: index ‘wiki_palomnik_main’: ‘blend_chars’: blend characters must not be referenced anywhere else (code=U+5f)