Доброго времени суток!
Пользуюсь мантикорой для полнотекстового поиска, версия 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
в настройках индекса когда слово запроса вера
заменяется комбинацией *вера* | =вера | вера
поэтому у вас и находится куча всего
Выключите эту опцию индекса и у вас перестанут находится такие комбинации
Спасибо, часть исправилась, однако теперь находится строчка “На третий день Есфирь [перестав молиться, сняла одежды сетования и] оделась по-царски” и подобные, хотя там слова “вера” и его производных не наблюдается явно.
вы можете использовать explain query
запрос чтобы убедится как выглядит дерево вашего запроса и call keywords
с текстом документа чтобы посмотреть как индексируется ваш документ.
Так же вы можете использовать форму запроса SphinxQL
SELECT id, HIGHLIGHT() FROM idx WHERE MATCH('вера')
чтобы получить выделение слов, которые сматчились в документе.
как бы это перевести в json- запрос то чтобы увидеть? или только ставить mysql-client и открывать его порт и смотреть?