eXist-db - базовый запрос Lucene возвращает пустую последовательность - PullRequest
0 голосов
/ 14 ноября 2018

В eXist-db 4.4 я пытаюсь реализовать базовую структуру запросов Lucene, но она не возвращает результатов.

В /db/apps/deheresi/data У меня есть коллекция tei-xml документов, имеющих одинаковую структуру, и я хочу применить свой запрос только к текстовому содержимому, найденному в элементе tei:seg и его потомках. Типичный образец будет:

<TEI>
 <text>
   [...]
    <seg type="dep_event" subtype="event" xml:id="MS609-0001-1">
           <pb n="1r"/>
           <lb break="n" n="1"/>
           <date type="deposition_date" when="1245-05-27" cert="high">Anno
              Domini M° CC° XL° quinto VI Kalendas Iunii.</date>  
           <persName nymRef="#Arnald_Garnier_MSP-AU" role="dep">Arnaldus Garnerii</persName> 
           testis iuratus dixit quod vidit in 
           <placeName type="event_loc" nymRef="#home_of_Cap-de-Porc">domo 
              <persName nymRef="#Peire_Cap-de-Porc_MSP-AU" role="own">Petri de Sancto Andrea</persName>
           </placeName>
           <lb break="y" n="2"/>
           <persName nymRef="#Bernard_Cap-de-Porc_MSP-AU" role="her">B<supplied reason="expname">ernardum</supplied> de Sancto Andrea</persName>, 
           fratrem dicti Petri, et socium eius, hereticos. Et vidit ibi cum eis dictum
           <persName nymRef="#Peire_Cap-de-Porc_MSP-AU" ana="#uAdo" role="par">P<supplied reason="expname">etrum</supplied> de Sancto Andrea</persName> et 
           <persName nymRef="#Susanna_Cap-de-Porc_MSP-AU" ana="#uAdo" role="par">uxor dicti<lb break="y" n="3"/>Petri</persName>. Et 
           <persName nymRef="#Arnald_Garnier_MSP-AU" ana="#pAdo" role="par"/>ipse
           testis adoravit ibi dictos hereticos, sed non vidit alios adorare. Et 
           <date type="event_date" when="1239">sunt VI anni vel circa</date>. 
           <seg type="inq_int" subtype="specific_question">Et quando ipse testis exivit<lb break="y" n="4"/>domum invenit
                 <persName nymRef="#Guilhem_de_Rosengue_MSP-AU" key="inqint" ana="#pIntra" role="ref">Willelmus de Rozergue</persName> intrantem ad dictos hereticos.</seg>
        </seg>
        <seg>
          [...]
        </seg>
    [...]
  <text>
<TEI>

Я создал и применил индекс Lucene следующим образом (включая ignore для определенных элементов):

<collection xmlns="http://exist-db.org/collection-config/1.0">
  <index xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <lucene>
        <analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
        <text qname="tei:seg"/>
        <ignore qname="tei:note"/>
        <ignore qname="tei:gap"/>
        <ignore qname="tei:del"/>
        <ignore qname="tei:orig"/>
        <inline qname="tei:supplied"/>
    </lucene>
</index>

Теперь я выполняю свой запрос по одному латинскому слову, найденному несколько раз в каждом из моих документов в коллекции:

let $query := 
   <query>
     <term>vidit</term>
   </query>

return 
    collection('/db/apps/deheresi/data')//tei:seg[ft:query(.,$query)]

И я получил ответ:

`eXist-db localhost 8081 : Your query returned an empty sequence`

Я пропускаю часть головоломки реализации Lucene?

Большое спасибо заранее.

1 Ответ

0 голосов
/ 14 ноября 2018

При работе с индексами eXist имейте в виду, что вы должны хранить файл конфигурации коллекции во вложенной коллекции /db/system/config/, отражающей расположение данных. Поэтому, если ваши данные находятся в /db/apps/deheresi, вы должны сохранить файл конфигурации вашей коллекции как /db/system/config/db/apps/deheresi/collection.xconf.

eXide имеет чрезвычайно удобную функцию, которая обнаруживает, когда вы сохраняете файл конфигурации коллекции в базе данных, предлагает сохранить копию файла в соответствующем месте в подколлекции /db/system/config и переиндексирует исходную коллекцию после копии хранится.

Однако при работе вне eXide имейте в виду, что изменения, скажем, /db/apps/deheresi/collection.xconf должны быть вручную скопированы в коллекцию /db/system/config, а исходная коллекция должна быть вручную переиндексирована - чтобы новая конфигурация была активный.

...