search part of surname when try to find exact phrase

Доброго времени суток!
Пользуюсь мантикорой для полнотекстового поиска, версия Manticore 3.5.4 13f8d08d@201211
задача, улучшить поиск по точному соотвтетсию слов.
Имеется: тексты библии и толкования, при поиске слова “вера” находится множество фамилий:
“шемелева”, “Евера” и пр.
Вопрос: как заставить искать точное слово целиком а не часть слова?
Сейчас с помощью библиотеки на PHP происходит поиск: manticoresearch-php/Search.php at master · manticoresoftware/manticoresearch-php · GitHub
ищется “точная фраза” с помощью метода:
Search->search(’“вера”’);
как заставить искать именно слово целиком а не часть слова?

Здравствуйте. По дефолту по “вера” не должно находиться “Евера”. Покажите:

  • query log
  • и конфиг или show create table IDX

Query log:

/* Mon May 10 20:29:57.636 2021 conn 3827 real 0.002 wall 0.003 found 304 */ SELECT * FROM idx_biblia_books WHERE MATCH(’{“bool”:{“must”:[{“query_string”:“Вера”},{“match”:{“text”:“Вера”}},{“equals”:{“lang_id”:2}
}]}}’) AND lang_id=2 ORDER BY book_order asc LIMIT 0,100 OPTION ranker=none, ranker=none, agent_query_timeout=0;


конфиг:

searchd {
docstore_cache_size = 256m
listen = 9308:http
log = /var/log/manticore/searchd.log
max_filters = 16
max_filter_values = 1024
max_packet_size = 128M
mysql_version_string = 5.7
pid_file = /var/run/manticore/searchd.pid
qcache_max_bytes = 32Mb
qcache_thresh_msec = 3600
qcache_ttl_sec = 60
query_log_format = sphinxql
query_log = /var/log/manticore/query.log
}

common {
lemmatizer_base = /usr/local/share/dict
}


и как посмотреть через json-http запрос созданный индекс, чтобы вам показать?

в конфиге у меня собирается индекс так:

index idx_biblia_books
{
type = plain
source = idx_source_books
path =…
morphology = lemmatize_ru
min_word_len = 3
min_infix_len = 3
expand_keywords = 1
index_exact_words = 1
}

у вас включен expand_keywords в настройках индекса когда слово запроса вера заменяется комбинацией *вера* | =вера | вера поэтому у вас и находится куча всего

Выключите эту опцию индекса и у вас перестанут находится такие комбинации

1 Like

Спасибо, часть исправилась, однако теперь находится строчка “На третий день Есфирь [перестав молиться, сняла одежды сетования и] оделась по-царски” и подобные, хотя там слова “вера” и его производных не наблюдается явно.

вы можете использовать explain query запрос чтобы убедится как выглядит дерево вашего запроса и call keywords с текстом документа чтобы посмотреть как индексируется ваш документ.

Так же вы можете использовать форму запроса SphinxQL

SELECT id, HIGHLIGHT() FROM idx WHERE MATCH('вера')

чтобы получить выделение слов, которые сматчились в документе.

1 Like

как бы это перевести в json- запрос то чтобы увидеть? или только ставить mysql-client и открывать его порт и смотреть?

есть /sql endpoint для HTTP - куда можно писать прям строчку SphinxQL

1 Like