-
Notifications
You must be signed in to change notification settings - Fork 1
/
create_autocomplete_index.xq
92 lines (77 loc) · 3.25 KB
/
create_autocomplete_index.xq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
declare namespace tei = "http://www.tei-c.org/ns/1.0";
declare variable $colls external := ('dc_apc_eng_publ');
declare function local:getTranslations($lang as xs:string) as element(index) {
<index id="{$lang}">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]/tei:sense/tei:cit[@xml:lang=$lang]!normalize-space(string-join(.//text(), ' ')))
order by $v
return <w>{$v}</w>
}</index>
};
let $lems := <index id="lem">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]
/tei:form[@type="lemma"]/tei:orth[@xml:lang=("ar-x-DMG", "ar")]//text())
order by $v
return <w>{$v}</w>
}</index>
let $orths := <index id="ar">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]/tei:form/tei:orth[@xml:lang=("ar-arz-x-cairo-vicav", "ar-acm-x-baghdad-vicav", "ar-apc-x-damascus-vicav")]//text())
order by $v
return <w>{$v}</w>
}</index>
let $infls := <index id="infl">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]
/tei:form[@type="infl" or @type="inflected"]/tei:orth[@xml:lang="ar-x-DMG"]
//text())
order by $v
return <w>{$v}</w>
}</index>
let $poss := <index id="pos">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]/tei:gramGrp/tei:gram[@type="pos"]//text())
order by $v
return <w>{$v}</w>
}</index>
let $roots := <index id="root">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]/tei:gramGrp/tei:gram[@type="root"]//text())
order by $v
return <w>{$v}</w>
}</index>
let $subcs := <index id="subc">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]/tei:gramGrp/tei:gram[@type="subc"]//text())
order by $v
return <w>{$v}</w>
}</index>
let $ens := local:getTranslations('en')
let $des := local:getTranslations('de')
let $frs := local:getTranslations('fr')
let $ess := local:getTranslations('es')
let $etymLang := <index id="etymLang">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]/tei:etym/tei:lang//text())
order by $v
return <w>{$v}</w>
}</index>
let $etymSrc := <index id="etymSrc">{
for $coll in $colls return
for $v in distinct-values(collection($coll)//tei:entry[tei:fs/tei:f/tei:symbol/@value="released"]/tei:etym/tei:mentioned//text())
order by $v
return <w>{$v}</w>
}</index>
let $indxs :=
<indices>{($lems,$infls,$des,$ens,$frs,$ess,$poss,$roots,$orths,$subcs,$etymLang,$etymSrc)!.[*]}</indices>
return db:create(replace($colls[1], '^(.+)_(\d\d\d)$', '$1') || "__ind", $indxs, "ind.xml",
map { 'ftindex': true(),
'stemming': false(),
'tokenindex': false(),
'casesens': false(),
'language': 'en',
'diacritics': false(),
'autooptimize': false()
}
)