Функция, помеченная сообщением об ошибке text:match-count()
, устарела и удалена из eXist, как и исходный специфический для eXist оператор полнотекстового поиска &=
. В результате статья (которую мне напоминает страница истории, которую я написал 10 лет и 3 месяца назад!) Остро нуждается в обновлении. Эти «устаревшие» полнотекстовые функции были удалены из eXist, потому что было добавлено гораздо более совершенное решение, полнотекстовый индекс на основе Lucene, о котором вы можете прочитать в https://exist -db.org / exist / apps / doc / Lucene .
Обновленная статья будет посвящена новому полнотекстовому индексу на основе Lucene. Сначала создайте файл конфигурации коллекции с именем collection.xconf
:
<collection xmlns="http://exist-db.org/collection-config/1.0">
<index xmlns:xs="http://www.w3.org/2001/XMLSchema">
<lucene>
<text qname="body"/>
<text qname="biography"/>
</lucene>
</index>
</collection>
Сохранить этот документ в коллекции /db/test
. eXide сэкономит вам несколько шагов, предложив (1) сохранить копию документа там, где она действительно должна быть (в коллекции /db/system/config/db/test
) и (2) переиндексировать коллекцию /db/test
, чтобы применить новую конфигурацию коллекции ( что вы можете сделать вручную с помощью xmldb:reindex("/db/test")
):
Если файл конфигурации коллекции сохранен как /db/system/config/db/test/collection.xconf
, вы можете запросить коллекцию /db/test
с помощью функции ft:query
и отсортировать результаты с помощью функции ft:score
:
let $hits :=
(
collection('/db/test/articles')/article/body,
collection('/db/test/people')/people/person/biography
)[ft:query(., $q)]
for $hit in $hits
let $score := ft:score($hit)
order by $score descending
return $hit
(Обратите внимание, что в отличие от статьи, мы можем обойтись без фильтрации предоставленной пользователем строки запроса, поскольку мы больше не используем util:eval
. Во-первых, в этом не было необходимости.)
С этим изменением - переход на более новую систему полнотекстового поиска на основе Lucene в eXist - остальная часть статьи должна в основном применяться.