From 996f91b5394c48f771ebde789e821d8a8d7a4352 Mon Sep 17 00:00:00 2001 From: xgc Date: Fri, 29 Nov 2024 11:25:11 +0800 Subject: [PATCH] =?UTF-8?q?=20feat:=20add=20Sparse-BM25=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E6=90=9C=E7=B4=A2,Tantivy=E6=96=87=E6=9C=AC=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sparse-BM25文本搜索.md | 89 ++++++++++++++++++ Tantivy文本匹配.md | 46 +++++++++ logo/text_embedding.png | Bin 0 -> 73862 bytes logo/text_match.png | Bin 0 -> 105974 bytes .../dromara/milvus/demo/java/JavaTest.java | 6 +- milvus-plus-core/pom.xml | 2 +- .../plus/annotation/AnalyzerParams.java | 21 +++++ .../milvus/plus/annotation/BuiltInFilter.java | 17 ++++ .../milvus/plus/annotation/CustomFilter.java | 17 ++++ .../milvus/plus/annotation/MilvusField.java | 17 ++++ .../plus/builder/CollectionSchemaBuilder.java | 10 ++ .../plus/converter/MilvusConverter.java | 36 +++++++ .../plus/converter/SearchRespConverter.java | 13 ++- .../core/conditions/ConditionBuilder.java | 34 +++++++ .../core/conditions/LambdaDeleteWrapper.java | 48 ++++++++++ .../core/conditions/LambdaQueryWrapper.java | 62 ++++++++++++ .../core/conditions/LambdaUpdateWrapper.java | 48 ++++++++++ .../milvus/plus/model/BuiltInFilterType.java | 8 ++ .../milvus/plus/model/MilvusEntity.java | 2 + .../milvus/plus/model/TokenizerType.java | 8 ++ .../milvus/plus/util/AnalyzerParamsUtils.java | 47 +++++++++ .../org/dromara/solon/DemoController.java | 26 ++--- milvus-spring-demo/pom.xml | 2 +- .../milvus/demo/ApplicationRunnerTest.java | 24 ++++- .../org/dromara/milvus/demo/model/Face.java | 8 ++ 25 files changed, 564 insertions(+), 27 deletions(-) create mode 100644 Sparse-BM25文本搜索.md create mode 100644 Tantivy文本匹配.md create mode 100644 logo/text_embedding.png create mode 100644 logo/text_match.png create mode 100644 milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/AnalyzerParams.java create mode 100644 milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/BuiltInFilter.java create mode 100644 milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/CustomFilter.java create mode 100644 milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/BuiltInFilterType.java create mode 100644 milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/TokenizerType.java create mode 100644 milvus-plus-core/src/main/java/org/dromara/milvus/plus/util/AnalyzerParamsUtils.java diff --git a/Sparse-BM25文本搜索.md b/Sparse-BM25文本搜索.md new file mode 100644 index 0000000..6eb2a46 --- /dev/null +++ b/Sparse-BM25文本搜索.md @@ -0,0 +1,89 @@ + + + + + + +## 文本自动构建向量的搜索方式 + + + +与基于语义的密集向量搜索相结合,无需手动生成向量数据,从而简化了基于文本的搜索过程。此功能通过以下工作流程运行: + +1. **文本输入**:您插入原始文本文档或提供查询文本,无需手动Embedding +2. **文本分析**:Milvus 使用分析器将输入文本标记为单独的可搜索术语。 +3. **函数处理**:内置函数接收标记化术语并将其转换为稀疏向量表示。 +4. **集合存储**:Milvus 将这些稀疏嵌入存储在集合中,以便高效检索。 +5. **BM25 评分**:在搜索过程中,Milvus 应用 BM25 算法为存储的文档计算分数,并根据与查询文本的相关性对匹配结果进行排名。 + +
+ text_embedding +
+ +### 示例 + +在实体类中添加 `AnalyzerParams` 注解: + +```java +import org.dromara.milvus.plus.annotation.*; + +public class TextEntity { + + @MilvusField( + name = "text", + dataType = DataType.VarChar, + enableAnalyzer = true, + analyzerParams = @AnalyzerParams( + builtInFilters = { + @BuiltInFilter + }, + customFilters = { + @CustomFilter(type = "length", max = 40), + @CustomFilter(type = "stop", stopWords = {"of", "to"}) + } + ) + ) + private String text; +} +``` + +非专业人员不要设置 analyzerParams,只需设置 enableAnalyzer = true即可。 + +### 分词器(Tokenizer) + +- **默认分词器**:`standard` 分词器,基于语法规则将文本拆分为离散的单词单元。 +- **注解属性**:`tokenizer`,其默认值为 `TokenizerType.standard`。 + +### 过滤器(Filter) + +- **默认过滤器**:`lowercase` 过滤器,将所有标记转换为小写,以支持不区分大小写的搜索。 +- **注解属性**:`builtInFilters` 和 `customFilters`,分别用于配置内置过滤器和自定义过滤器。 + +### 自定义停用词(StopWords) + +- **可选参数**:`stop_words`,用于指定要从分词结果中排除的停用词列表。 +- **注解属性**:`customFilters` 中的 `stopWords` 属性,允许定义自定义停用词。 + + + +### 内部处理 + +MilvusPlus内部会基于该注解,实现以下步骤 + +- 生成存储文本对应Embedding存储的字段 + +- 定义一个函数将文本转换为稀疏向量的函数 + +- 创建该字段的索引 + + + +### 使用 + +``` +MilvusResp>> xx = mapper + .queryWrapper() + .textVector(Face::getText, "whats the focus of information retrieval?") + .topK(2) + .query(); +``` \ No newline at end of file diff --git a/Tantivy文本匹配.md b/Tantivy文本匹配.md new file mode 100644 index 0000000..79c16b1 --- /dev/null +++ b/Tantivy文本匹配.md @@ -0,0 +1,46 @@ +### 文本匹配的搜索方式 + +Milvus 集成了Tantivy来支持其底层倒排索引和基于术语的文本搜索。对于每个文本条目,Milvus 按照以下步骤对其进行索引: + +- 分析器: 分析器将输入文本标记为单个单词或标记,然后根据需要应用过滤器。这允许 Milvus 根据这些标记构建索引。 +- 索引: 在文本分析之后,Milvus 会创建一个倒排索引,将每个唯一的标记映射到包含它的文档。 + + +
+ text_match +
+ +### 示例 +请将`enableAnalyzer`和`enableMatch`参数都设置为True。 +这将指示 Milvus 对文本进行标记并为指定字段创建倒排索引,从而实现快速高效的文本匹配。 + +```java +import org.dromara.milvus.plus.annotation.*; + +public class TextEntity { + + @MilvusField( + name = "text", + dataType = DataType.VarChar, + enableAnalyzer = true, + enableMatch = true + ) + private String text; +} +``` +### 使用文本匹配进行搜索 + +文本匹配可以与向量相似性搜索结合使用,以缩小搜索范围并提高搜索性能。通过在向量相似性搜索之前使用文本匹配过滤集合,可以减少需要搜索的文档数量,从而缩短查询时间。 + +```java + +MilvusResp>> xx = mapper + .queryWrapper() + .textVector(Face::getText, "whats the focus of information retrieval?") + .textMatch(Face::getText,"retrieval") + .textMatch(Face::getText,"information") + .topK(2) + .query(); + +``` + diff --git a/logo/text_embedding.png b/logo/text_embedding.png new file mode 100644 index 0000000000000000000000000000000000000000..e10ebfb99e19cd26fb0cf734a0d1e3abbacf97af GIT binary patch literal 73862 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

HRW$QvD`CAE3fs*UTPr&fO@Saa^5HBWLE`6-| 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%0DTi$#2eAT#>_^=$r<=wE0ZM{#0zvtX z*Jo0sM7vJ!=_CB{N?vbDBZ^G%-sTtM5x>ze=Df~k;wijf?WCkeM7LKz;V;?krhS&8 z?tbdgDgPG+Qlm%P-p$3Yy*-7(z%H`HNWY|Jk0!-tcNMIp_BpiyL?1clvuMaNmLHso zlf^N0x%g?n)uWK%c?%5Pj}Q-Sf5(3Hxvb27)>7e3N$HmMKwKBU zzSQ9hBdIIHx5f#NqykzH9M51&n7ekk)t$V=bnT2dMYHSp#?b0J;gA~n-l|B4>ic0) z`KkvIeySQip0cOi(@3Yc8k{)T@Tu-P%s$UD+FN+foD)wVb%?K0^kHt+(e-XM<(}(Z zO*hwWzo+j%ZPIg4dr5I)8-nmz8BF?W2wmFdTSjYq(3|QF9J-7M3naCj6Eb?%%LxH! zDL%?v)UY<3AdyN&V-E@rCj22bs2Njpnhjw!4EhR1f-HYeGVZij>{>Z4S5WIrl!=k# z|25)t)tuLGyq*iID*C0@j^JhX`(3n6f+q=VkY~wXkAMFyHGe4oz<0Gw3dZbD7JSr? zfZv?2#_-sroieKtG61>MXf@1dffQ_Z_mMHg!xn~kGw9aa-W2Z+)j3jd#uWe_#7$w1 zoL@Z^P&k$+7lu=IcP_iU+7rM}7)mHxmhK-EK5heMN`;{LFUbV+$Z2zjD8gvO1V6cV zhFUz*E#bS)?dok0DeRna2>-FdAH~2@PsJ z3^jD1sQzFK@p73SNDEvUJT(2|ta!bvSe*LB z3a2aySf}ZWN48QyZXK+R@=mIgs{Pp#VU#K*dcObD4eLV%%3dVH)yO>EZfI#bU3YM$ z289Jgod&+Iwu-oS%!Ph)n$vMEubouZxjuNd8Z3$OaNnErKK-wslnMGSb{D>qjv+pj z-Yx*dBQq$ltw%-Xh2Ro2MsGmHyv(4H2LP^VCg!*$^aX(a^|$ucxeUc$g zz65@-17J@9gsbQEr8TfNP&pQ0vmO6c0)t~|tDJQY zcjy@o62{9#$Uf$3kYs%uSTuKiITpxc0HqOnw3+8p1hE%OF;2C=)7)oq!gm3h3(x}2 zV!!rbSG)X;lC}6E!0>uZd&%s1cc^Wg5T(7I6;d$&5ZhYHKl&_8j4WGkd7B{Bx+o{) zWrZ^Lv8#!}=A{;T_pQ3?DMHv)D)E=#;B4Az^%QQkaP6)GgVW-`w~W2XKm9H|h7~QZ zsK0qpOF)WEe?Qp`e(XLi@!tspcyQQ@=^&u`-G8m=|GaQxh;gs)B7iAr;)J|AZ$@-E z5FC7O$ap{N`-ok6bsW)kcxu&KxfsMZoA!q~Y+-*xF0I*#vBXWWoDI`!wI<O!^Tw~5Cq=}L-#N2+zNFOFwW#y9n=^Zr!NV4rIMGMPv<=%W2IVC!F?>esmV zhiu2aRzNhr5HavlK7jv~KmpfY5Q57op}3>vlvYKPos(u$mVeK?2rD=}p)OS=Mq&VN zAma~fae<7k0!I}E9OiTQ*@21B+x$K7eBx)^bj==T9)ROf4MYpA}cZ-uQD zbj`W_$xMtSXo_AY)+>-8_xVPX32QNtek0FwnFO<+-%^rjAyvb6NNC)5l8Enf1K*q$ z&g10LF2gK_Yd$>{(8yqW{khye2MJGO^*_zR zRh@_gV5?y)5FzhGyz1mfI&)3;osWi10k?JYLTYx=MO!OK7g~Mb^Z|+V_XWSA4(@U- z0?*f(9d@BfYc>*O@)Kj+mbwIY=>Wo{+wR%MZ48Z}n1TcDH`P1KpUOjp7)hW-Es9FF z4ZIS4a%Cm;{J@=K^a*K}cgHegEG#{a1+rStC^d;$X6wBCv}VF%s5-K*)b= z(%~;kDMP;t3~X8C7W2b*f0U$t`QG|9T@mm)VAzse3&Q#`8Pnz>AggGvt>36%iVO^@ zFNx5gI@qVL*q82K{k{A#YjG(<)@?YW^LN;DKaUx;F=&ZgA>Crs9bSvFpcWv)Nu0i zF#gD{NH)a02$lqBf^NRxZr7=rYoE#8FN#^R^Iwct&Bl(d8Sr0=axZD!P!W$ItY3}8 zXkNVvuyK)78n#{gOX%#pb6E3>q+m}C>Sv_Jyl<>S5Z`{mmdyVUaC+}mp-?`|rk+{o zN85kwJ1wdRTG0p?<^oK^QjQX7<&Wn(eRwApjbKZO6@EwYUw&rnKo^pxo1|QFepKNg z21g5*dp`i<*jTJOtayxELbLwaiE80--btEtEZcakesb+o;sP_e^29#yJL+%RAAKyl z8m@#{fF&suhjir?H3kB_>|ua^3g`g+7-EV1&ItL0nL)1rD`=duT>P)wPLm|txhN+P z;MLHn*Ov0CdU++DwfenLIt6cVFY7Q*sR^~#&8FP~KkyRMu8@N}xVD}=*P^%3d8M2F zN(Mo*^H6sCk8j<(8Lvh`SnlahJJq?Gj~F3Op#uwBQ^WxPYN|In~D!;uw@Li`#*)e6hNQ!7AVE6uRKp%9%_!@fRtqx+J{Jj0Hr)@lHx80 z$8y*tm_bz@k|OENy6%nu*p8NHukM{IN#Ft~XG`M&G#?8t9{ZidBmAjcvHDTh9d-e~ z0~VWrhfJ}<HB?=!vIiWDG}(<^n!oXZh9(2}?Jha4T^wuqtt# zp?WJg;Ta>aghTx^Yc}P9KC~l@DoiGx>tBbFmHR1AudkSd$LgFmO3@OF`diXNd($xt zx!>>y(ahRMl{6NfW!E&Tcl!rlOW#9DC;Hf)PWz5T92BbBHf;kz%7c(Dv`;-L4rYI& z1!f=^{?}nbVVyrVT7M4}I^axsTvD7lT$DEr!W1AgH>(V1s|;2-zFP+xG|c{LWqL$6 zXPv@&&Q+FgOL=$``PKsnVClNk%pYogqVbe6ch`+4CJnCrbCjgWF0}6KkEzdGPsyCc zh{5M;kIv7fr7wJW0FFrf2HTey?mEN+rSdSvQUdc}E z3SFcV&UoHx{w$mtFla1`BVhCgCC$JOWv;f*mD`BAX&szECXyOQU0i`7lCAo`lin7n zQMstIswBU{y7n2x0q`&KjCa#sIr@A-(Krv3Po9DvFYTtncH+@Oo<1s-slSvU_Rtnm z!y>ipNE1J7u!#TVAsUtpqK94v5C8!Xb~*W70NHIqZL5Wq&NVeNKdZIAbw=*#T)Y_~gsXs)B5`}Y1eDQDZoqr?5lgo*6aVGO;=equrMI74@Y zDm5fzpk&X^d968jZM=qzY3d%3m4;scQ)OS=Ts_QvJRRYFA;ajRy4)FWAE%O7|?Kq|ezzYmZ--b|B2%gOni|5WQz@6?y! zYkBNDU~LQEr^b+zAIn||?fxo-wRCBmPjDCh_maUtNrBDoo%0jIsFb9AYAVAeu*GG5 z%sM?U5g_EyHKP{AtV#>@)HTLie^3Fc1z%S(Gk6`cwsFsPmfTq5Ww-_8M6i> z;6x~~{f8>Ax!SYN_7YRjgD(Mhn_dYBNI8aVRe&&%Tmt$dz$_{?7PrXy`j zC5ONOx@8zYHW`@H?ILq;fmmIj*F%a0-m|_-1!! zfl-&$U z&?T)?#2>G8gB}RxebCiFPrqqUL!zjHCC%YaC;=b;$ETfG$e7KtaUF;FX9hbHR6MtR zLq48+K58{tEb1K&1nwl-g!e0h1i2{?=9}D^$vHpX_~O~Vd{S1PV(Z-h5}34Z-GYtW zx*H38M5Rl@d8n30uzNl@{)o)05wnImrH2Ou=Z0?%vAuSK%u@jg*i7Q6yW` z4r66h6v0aacf)4B=QkV zR$7P+ob-BitaqWlMGLj};JGy7S!`~lSXlbPlck2Q_;`8>L4{{&7OUQFS0)Ldh@PFZ z%arSxC$ka1Zx`H4YwMS@+n@8wq3;8UJdijm!hBZ7UYy2bOC5A?g!q76M2W$(c-iZ$ z4zXIS-ba1ui~iK<&z`^jM*3Oa*I5D+l}-qseYzX-^V!z0&7!9FdBq3X9j zIL)WR9B+?1lbUjf&+(7UOqIk2LeuHR3NWRFm@uxU_+@QV{lxB~10jtP&q3ru!u88< zgXwwk7>_C+p=8e1g1aoAQn!G&x%s{Tgw@2Ku3rE>eZ{c-Dn2Vtk(2uhsQIH{7yZ$xsk26SA(}Hl1Pa2oY(8eI5>xm@9dTb z`9Am93l##m0y%*npXA@o)NTW$hzK@ypx*;GE+y7zxvXoSoo*Hxv6Ho!;Ry|pAg|Kyq5yG*9AF7lb64@R;R%z&DoE4DUV9>c2P7(Mr6PA~!?Hsdr5 zr!zo-ZrBpT7~-@sBz#jr3c$HZ#ai;;ZLx2(nG@oea_#`2TN>19kyOD5@@ju7Ucb6s zrjU{Y$GVL|l@Y8Mc8KjYqCWE7K(*x3t}P**wWk0zWGoXPLW?a2ej2K?x;5X4Y5!;S z*koKO+9(fS_mWxyy7udP@xotLKG%XW46X<59C>(O}>Z!b9vh)N}65})E|X; z&NWmC4=7SEsCPBm4s&6xalT`Dz(8bqpaIIHbd@}fZ2$@|YAdpr1hnsGyteC3@;I5j zw!_P~<`)ydHC}{yiqe6X_qjap^>^D-NUuIEQR1iuAz=&y zLk=b`@8*0?9H$N6u>#koShYnkRu={e(5S?PKI`@v%D$;+U5`xcYxqOa2OFaWY$gfV}`+I zrSsm6zx5l)rBLW zz`5v}{?5mH{i!f`kv`(Lo&1BzFQS`P7yydpA^&gI#@a*ZOXj8ypSJb&agnEZvXFbd z=dk-7Ufp_ctWg&5Q%_sN(xCivt75oLbBEZO?(Nprr5;=7{ z&@d+N5n8#-V1$Mfo9j5%NB21ojR2w7Sd!+3p1d|#tF1T-H&0Getp>q_m)L#u`+a`o zpUPe|Twv)8_*qZ-1lhqpZ~v(<4Jk?>u~GQz)sz(crEG+oR&Y{yV++04;myZ=?1L#r zgGn=}HKF{uzbh-VSOt)$JGJ>pyz%_6Fkd+ZPtQ@tD~8i?a#le@yHlJLhC`H)l@u8Q)v3GC^~~$ z^Hht73Nz2v`PTV41{Qxo=^p8L=Wy5(qb@WqXVyEYKKUWm_h6C3N#B(!(NV9C39m^yj!?)! zf^3U&G8_TC(Wy!iG1obm{&kz4d;DBllG;|37&-0Xtx9SC*8Gu^PEvQxks0DWkGE;q zr`EdLb4fzp%Rjb39Wd70aZaJxP<5w(rRLO3?yh6M_&NzH*%J%Hc}2ab(RQ z%aN&ectj@?_eGenf#hjNNOQ*8%OEdXS@dZQV-KL}ptK}MZOh8{tV{yb$;f>zf|c3f z3es+}=~>@j4V;v#24t`#Obw~ACQ+%maJt$Lt4cFk6;UNDT%AF5kp%n1^g5qz%YCSU z^O`3J;}8Kn9dlJ4s#E2c{#7&1%JpN1pPftvN+BUVNsJOUPU~)a?$_uWUcn={Yu)B} zCPL|6Qj)Ub=J00<1DYQ_SNpq)!(og6$U_ zB>)x6{l|G*0_Tl+^^BC$6fxQMc5~Q&r_)pG9Am~K>L76LllRb-qce%udBGjnt?2nmLT^N`^rpW9s(XGf%4s8wl9xnD@1qqTHw< z$f{kzQs(zOUMgRmNc>PvHp$VpVK&dRE7Ws#U-XUtYziHz)!*KC1 zPPY1~9UR<5^tBc}^?bXDF&>Df6Jq<^ zlVJcxHenU{EfE);VrJX#t8r&J^UamXd%gIP#F`v7ZqAO_${CavCG# z?&`%H*U3a@P$g3eRAAiF&bM2TiWZ`aTY3uI3h_(jg;TZFJ^VIdu~Igt-M*7y#tAgH zq+qFB7KoJ5&%Jqx#C;jz$Y*Rz1mZ3N{Om>fvBRU!`wX{2-8A>}AL;h4as7lKd z$DrqX^F{w;!=`BI_t??dCxfkI@myvB{8r3<-lzhFDxB||AD7}vq|h$rac)mV)UMtSUHazAa;iVq3{*W$$WM{psY@a(f zy7hZPz@RtnR}iOu{PO|>LbRC76Z`cJ!W65sKOn}PovvFV&5W>dUZi4va(Hah$PEFy ze42rWth}ERF=e9?zX9>N@BhGXB;+#uyHR~DTp@MC4S5Ds{|7S})d0{yT>duR5P>Ni zG@|HeB=I0bLTM>O#kTVEMS6R-N+VlRt}0&LiQoL!3{2z@uu$gZKaF-&JJk(5qkVB8 znzr*787mCcKH*Mu4haVc@;vYSar9-FLW|Wrav>P{5El!{v07(E)V@=E5>3_6X2=LsBU}B@G6c4{BD|PX*PEhNVYleBQ|}-br@I)9#*}r|;*%N}{mJUUW*Gm>@BzNV`m-x)>dwo|2UgaA zfbX2w$N(y1VMTFgnb{h&E#rZ@_CMdV!r-@17y?=)hupP--G2G9s?_RnYPlRIzf{WS zN%A}qKU(K{0JPc8FAX!8!o&)<_X_BNPD;Gl-NxR+C19Gt>2NW74ELfk{Hocg<;zqM zV0nHhC*PO~`q$zIIq++$c`_7c^XqL-PuG91H$_O`a?w6w97 zAV{1xkYeSSWdh|27hR}ykA1wgI1tzYq0?M;aXF?$=B6nh)!%@0vxxwRkbq>!`$x-9 zI`Y`UymdH-teydMt!V<3;AKCj6Bm@g$`hUB1@OXtjAkXLinhP2t~+YTK3`%to=B&l z3rh_8^uAK>@}d<8rHDb>LIG%#Vfte$FY~o4Fzhl5M2iYr_eVE(e`rhuR<9zrj{A_QI3G@sBNVtiMY&>=zFFPHjbpmTa-U4MMSzrmz&8r48V!0-tgVb~9L+9E73t%M0|EFC8 zg$4vr?%?Fij^2DFOP9G2y>2JJdRXgxQiDp-YkyLGIPk5y0g8#wtc3+QQ0(>~0LW)1ewOIdVR@^l~r9^Tz9;gN?^;w4cXXK&VV#jx}~+kaZ+T zRyU%HTlQMS1J#2)=zs2kZg#0Vq6BDot>r}kIRc$QW?^ia4FFrVsR4Tf3WT80C-38d zBQMN6{3q!L{V(u?=k*(l7UX(u+jBbvl?G za&dvFtrEI@XWcPe`k+y(KcQ=jn3B>`%HE#5hH?$}44}p{O$Qsm{EoA#0J!xJ4oV@w zDgZ+=D$K^LmwO0mV-YJ^W0NBNMuK6x|O_|jnHs4wdplmg^?q8UhZN8P! zCaH$zZ8(`IE%D)!@d|VIiYi!_*KNv75=4dh-A`E zG>~o~*ZE?)Pdmu0bk>Ga?d@;@WC)1CHQ9jzHjsB!{5L-g{J%ZL|H?wGKdSukq5kE- znHbg~^`r>g9j8rt*B|Y?*w0;JydL<*>BquO^mpYuHl@`hO(aloR~o$O-rx{!Zv@hd ztpB=@iGpriWZW`<5&}-Zp&vh_tOcNk{43f0_n*1TwH)T|QbiyY1JXqkJV2zs?S)9` zYgmI3@aGF9)zC-=WsrV{oIfbL`+G-XfUH*e`=`?Pz1_?_?Dgvf&cf( z10$t$e&>Gr|0!zV?-QFn`uCA6z!WfKQj#n;-v70!Ze`%PT>G7=|1fp{jsb9s{x5R| z7{fxeJHzmwmj{?y^FY4FOaVGjWc*jG(0IpAsnmFmwK((`8N zAH>LH{o%|KfTsX(#?ZvkE;d4>IT>+~kXw>iZq9%xIh1 z*jlaXa6bTUSL8+0F1xd)rb+;m=f?t(0Z;Lexx`(W-6Gta{||fb8P{aC zwGUfCq^VfwD5x1l#70pFh@e=BN|P>K30?K#AV5T# zlu#v<5csbfoEgt~&UwzvbLPwY`@Nr(K<>Toz1LplTGw8SE$%qii-9lH^#Iso?|LiD zdfY!RHW38mvi9B2dq2Wfd}(fqoh^`xQgaD){v)oww z$)|n@2FT_>sngwv!@N}Wp#{j^_ zVVPZ5Sp3sG&*eVj%(;_U5`6yKjTJXeoxDYr$tYodu%M|QQPrA2W+;YYz3+o8a7V5? zy#c(eeR{;5QPX`a$PrHg6?vEEPzNS^_I&9^l68A-<(Ls&QMJ+Hsa{~0hYI&AvQxi4n1Q!f`RL#`qv~bC(#yWLr=wehq$VmR z*7D(8Cm2;Pd+zPX1hQ=`NrV`tM(V;Z$6Q7tYH>GKFUba+wGy_cBPifybOq>1+Zz1f zNBxtGAej6!0O`M<#pK;74-Ydr{@&ml*@Ja1Yn_zb+Pvla#PgF=b~&sa{CL$wxth4T zDD;6>v>ip{S|v#KSLnRMW4D&23s5{oLj9syii|F1$LfG;f0v*$i8+m#Mt{8D_pqlx zU+gRE^oq~2LTUjNXN$o(NK={&w|q*O?&J8sth9M5d&&Ksv1hlvy33nW&(4u;K3V_d zp*@>Fcl7b{^^Xp?m7ITe;qla~oD0X1NkXlwcSl|NLpa(L7VBaW925V_X>CYoZlt=Ude!0rSinSHU?27$|eTWxUT z>`$~4yU+HqOC8-9k|lbvGPL{)+`}%d2od;pjs>B~i1Sz87M^}qB4NbhJlYuuexqBZ zeXeK!KQ2@JV2!7d8e)EHYkZNv8(Se zCz5snX$I_S|K^Ah)a}{bn3!PbDlU5P;DbW5i;(G+{o34g!rG?ieJvVEDvGUcj1P(VhWyV7L*qopyDWGp|`R$EV+cO-7taM@K zh+e-%aYo+o$B_hcjGTZxjII@EGkod1cG!fL0%#tL7y?gH9piFWOS@C??MvadZ%bDWf6-nh@uGUL--pMJxYJ(%!Un#E)JyOhx|4F> zuU^tN&xFpC*lO+W9uc);6Z`x@fM@U0!PY+?)JN{}y~cNQ?AJ(lmh|*b0r!sWlQjuH zt@NvsnL;kN`1#Q%J_8vJlMaC0oS4*m2U3%bfW{wX#| zKFD{z(V6cCq(2=5t8RUFGYSw(aNhYF!10sa0VG)W3z0|IpyosI;d*%=s7;e3pqye< z#8tFd*u48ta6#J!0AioGdG)|t1juoeTwehVo!qEk{e{(VJlW%=8sF@Vhq zTeE*ROs?I_646wkV;=<#NXH=(WlM3O_*SefeRI{k3I{d>gZwER6AKNXFrSZ-uKizD zztrf=nKQo_=tj^Swu)VJxh02h zBZ;7oD2-Iag9?R=gqkV~_zy`s8$s(z9CccevwR%#t{C`(e*b+fyHdY>yY}l|&Gkdg zc(GK_6ZT<>+U;H@?nQ!6mn8o8V*>J$7qOWXYtM*YGDQJ;+WQgd1dRk5*@lPz&1&8Q z&qahizdyK>c1lI7b0ZM?{88ZCXep; z$s0gS@qBtfKtM5AU3MM&7*s5wH(Ts$uJa8~ylJZ{;;{!c@gEnF!pE4vCEl1740Uo%@+ z5g9&^@w9H6KHMchaT~l>gBkxk%rA@Nsn4(3$7qTl1FH1qYRJ*|mr{P<=r23Xp|-Db zBOebCyZdgO_}QexQ)W#+r5Y*9&ySU!K6maV(EO0dVJW5Filo$UuV(#9qI$iI@(FmX z47Q)*49=|>_+Em&)43<6!ojUdqQ2g^M`yx$JZDamDKTn2@kv#rXKd4H^+O%Y{sKT7 zNF4MjL_@m)K5O?-``IZ*JPPl908EAfTQV02Xor3q{V?L=sa081;N*rPQt>NwX#GBe zTwYSA?q&(yBkHGKL7&2wx7Szuaf{qroQ+-N2L98ug6xsTzcRFmsVM>}Ou&7w9ZWm$ji)%9l$Zo{Encla{L$$OiZ>QV8;;@@>n%W6t5<)XnsU3Q8EJ5IxY8f+?S z`+a{7@W4@+tQ6h1kAr>dKKpMO)bp^a+zUvq-uy7+>X+^g803EZ7eik*KwG?W>^;kS z-5j}eJfFPWLaKMQuIf#T+hoh3Q95;wYTnPKc zVfsB*&NBG4+FFI zOh#|bbN#!HemR(nk5_`v4cvUjD+lNMvuk?azvzi}`I1Fm2o!tZUqFk@Lg!S*3bVos zJI&+2{Kbh@DMHK;i)`vLS!)Pd0Ytg~5~}(;8|sHfoIfV}!l|nGk@%DGcZ|`lPRD7J zvhSB#wt25$04&fr}o+SYz{SZrVRDiDV8$Jyl5n|$w{~(>i z6{?>%9V(BTjCL0Mt4-gCUwy#gtLv{2&a(29JYqW8fM-%%x(4!y%rF?LCx0t_mq3whizwj-ip zjjnKAYh}8Y{iFku5&4PWQ(0??c;evE0>R)nh%|i3vZyXRfZG+{7c-}YuR3aK=hAsG z2V&lJA5?qN6TH&2n2n-n%uDbe50)gdS_a!3+U-*<%C}+N#*-UZcCeij4czW{f1T+1 zeUA4pt}yq#cxvUDUs8(b3I-hpMzKwEx%K2Mxo6XEh8IT(S#^d(&yomDO-&&VF=rd4 z5+<|iAjGzMqVIU7RMj4S1^(9kzB7cj%@+|0>@8 zM3oLX=~!ssUR?}*3w_}izxVxX7zQYaG+D1mh2Z_s-Q6z)Rji7Cbl=nMr%)H1^Y0%X z<8@p5g3V}+(yMh)-hUF%fp?T=k7hYRyvHIu~mN=yV@`8-JU|hWrBQ zVldcg{OpYmwb0XMvQ}nvy`5HNE$&bnr=>Y2crN>FBQDtvBkVD@Qb1a8uc%Sr><`W~*wV=wC_fX?LBP-+T!iz(%2H7gM zXr93go=MWxIpBSX@A8z2r+$#)!!3rK1FM$bD?y-I8sn+IYp|e+gyKOJ8sF&qARY7g z=)FXhhVT!L8}_jDNm@ztZZFa05~V%CKUzDv?a>ZR%mG5eS@+AB%S|M+4Fx`-F&mc~nX!Rx;B!x! z_zqw$J=#n=a|2$QH=-yZ3xo*^!em6$g0*5QZJ! z#%Yr~5Kpvj&6si6``e@o(QZ8t{H;rT$155RsUCcE&HbUyUs={n=;qK8=Jj1n4=&)$ z%Wmo2{(1i+nDJ=L+bzM8Nt-k=cR=Pj5Rs@+^34)dX_M6ZZBkeDFFpGHD&|$vZ_C?Q ziJy0&>FU7>%)6ZZX^I1{w^{dn82CR;vAs?i*5(|t)yXKGc{Mpt>i+z+)bXn^FZS+f z3-5znIS5jM-NU-E8IDSkHGUtgDMzCF9fy;epTpfBCjGXmmqf_J3yjgQ`b$~_eLh9C zlRrJzLpnhJs(i$ogtPbPuX6s%D@#yQ3WZyFN*@kp!;w@n@YzjmNjJ3_Y)s5L)u)5n^3UP^o8M??T4}s1z79xsi@r! zO-e;A^+dhBtVB@CE(2^nxmwWjVN&A-;r2;S{oqNni=!bYz1yL;is1#fcLNGbk=(BOuZf zy_J)=y`LJ})>QO@=*>c75NO?+^18t1^vw9H0db4Uh_SN#@iXq`_`dGxCoo7>>b$ z^jF9B_o)V{bBPMM>%%KOCn$xF;;4)m1A8Uad{vbn>+J}Qd6pEgr38&nrDVe)xADz5 zhYBox{;jsn1g^oRk9D-7Wqh*pE$Q)xYaS&E4qX~J(*-?;?XH;_3*UYF`4#Fyrv~MC zOhdQD7im==&MHrzC^vrbI__~%!PLVLFQ@aFxf9j}&AZ_gzy32z2}RusoWFlkP3^B8 zj1ZAfgNE1N9H6JCPcF-a!VYIj?f#seP5QQLKa3`-sAG9}pI9CZ=<)d>FLVx3yHq!_ zU#I6wrp2Nstt_)X%_j_9GvYD7GAi9FRLJqeCFk<{E2VL?dD&;rG-l@qJaH7?S@pdn zbVKNf(?gnfPgm=TOxIl6jgPnKm5M^9s5^p!Y9L-!=>fe@9qfnyTLLIK5B|BBj zoVAv%`=HtND7txY|DW2(Z(;8X{)fy~%h)XF{i7X!o)Y zy1AUgu{>zS_P1%u=wmIXhp<7`IR@TTyz`d_s%0ofQJaeqg>j2X!@oXE%W^@rNkYGB zx$ZkRx|4Tv7kz(Ko5-=wGj-6?bI!=hZeN6nzp!^oL5`V4srcSjhi>uxqZhJ_r#r35 z?MJE%V-Lqo%(@I$%fw`{6GkkjL;1FZZ85aT8Jts+9&0w1zCQkTSo8iKNs4JI+SJFk zsM9cFJQpp~y9Jm0P%(eg;fdMG;fJ@iThAS?Z2fR{{?*9_>*88(e7kc5T9&?1K+*29 zcclCsR znx+_|1T7(S4@}h%^Z+sW_(@gE&#!;D?|}<6(v)jl@ED(USizQhIzQ9)b~JTy(~vjw zIPQA0EQL|LdN`P!p}`XT{wp-czCD&y`KXko01?e$j z-1wDLEjptTdW@c9F);5pbVwJ%&FvYlEKrjjx+yo7Al5B@#F+Q!(8I#<%5tyonMP$R zzkR4l50&p#i7K2I8glAvb?*JR(wY9cpVEaA#`0{<2aU23G}3?8Q!>e{daVDX|Egt7 z%GTj#d!IPuY&lT$X43`yg{%58z0k2}$!Dt9ZIcVozcG20QM;1Sswu-oGGcRNIt zDO~SZm99$J@(4BEuO0KygX1KUA(1NL9#C+I5i%3=09Aq3<2zkZ zDN>s|7Ww{bn5VhooKv{a%?}%$shKbLrcVxk2&&5}((sFQBUbfkI6@cFD%mmLeDx=_ zNgR7vTaq(TWg=VhdgJoC#ie{y+ph!;nRfT75sl^-rlr#l$)CS+U{|3DPiWC-oOeoD zzVXW#??$x&PYc0YX^6eMKxEmvtk^j^UZXe$b(?0FI~#AEayVEQu2dlNSfjFh{+a`r zW96`*S@24vu1$C{DAZ6z%PLSWkFHtStm>Ws-Rp6n2nD@}n?H9d^&|!))L=GPI z?(`DenZ8z>bBB;j%clah1P?(k6>*$MO{pZ>kWZS6v_LizFv^-4ik4{+j1n<2U`quA zJlk|QI*Z*ThPpU@6_<19qpxWPO08$A^&f>Nq$j95tn6&OKWH_BM$tk>f~M%U$j1Ohu!cgpSEZANnMfX2ZQeGtRS^*}$Mg zNw#|V3+eJn+op;8a|SDJ+REa~Q-7>u#LLl4P=%$_xgffk^;_o=9iOQhd6gJ?F{ZS<_9cT-HOF3E)~nSY4ctqf6EvZBmpph3S1*Zd1HYgV zXZlHm#9p8iy;i2bx>#CY0=Md5-Ql&?qerspBBe@!2zhnhL5Hu!G$YGuwi-iE;Slw< znprp9*sQynSDU*PViL>sW5?Khs_xfp&u}x}z-Pp#l0m)FG=Ih=ra`;VwEnzT`k{Rs zSxO|%EP;`{*W)3b)ACcd3KV2Gr0gicnwhkmL`jO6B-%DrYl55CE1ENB(ofc`eY~ZB zJ~%u+t{FPU@?9=ATXI1w#eV+2<#%yRTdy}WXsXETc)r0*y8%XFgSW>}`~#OVPhX>1 zT&t6|Hp>Gn?NKYwSAiDQf-zSQ^PTx3yXLnNRQD=Z^i0RM3WZUzcKe@hrTTB8&s5A; zKUz8Xq2?eVkweqRI@X8#o}C4^!xhQ4x$Px)$Ubmjno37pW5>*}=97u$?_}#YrxlpK z%XUvFRBQ3DvKNWru*O@>c6QvTH*hZ7=-*oNXf&#b8u|tTKr_tt3b*)MwCE%)y0gtA zC4=P0;I$lH>l*#mZUdViikV5S3rY<=vbZHLQ(>KVTH3&)yZ1Bak{wEIlKqUH3N)95 zT`dn&T(|mogZKvH0JhQAb+M@<;_bVGI7fS{yfjCLr6#dnyX;&`J?Nu4kI)vCq3Ov{ z6aIqr7d)%IW*MH=-;*(|;da4U%3*TNr_hV8V2!H(!+INv82HN&0X{_JZy*OcwB_q=T4*tLz59AjbrT;rZB{P%7*~inXB#2vwp`!R znSNCttzm?M*gBgV!$Q=`@)(68Z>Jd0(A`*EYoFbfclz)CVdIv@od5ntkqEURtk5Kz zFwnnLBL6sTZDA3(W9pegJ)y*}1>hHnF-*XjLdBlrA``}zKO6hpS@nQBrJqQ9@RM*uv}=S7hY%}Et`jBSs@v*e1tAflRIVH#2q&fT0EW`; zk6NvltV?vkcBj$|GR)GUY}#(GXUmhGK;1|F`d)LSkR^jwWLtoXEr_8IRau;V7rM(_ zq8@*G=?z?e>M)0>B7sA+QmX7rOeAc@)P|u6=phLbRo{lb zS*x^D@X5yR2{Wus#+1?;1}$(|gD9s|^K{EM!A`*$@uM7sT{F251BlX^>5q}wVSqjn zgiX-!0iSL1n(3}UMpbx+Komxzx#xN_$xeh~op~X*1bS(z!_H%l;JT2=JOSI3<_y6& zDYQfH{@U()2_tNM^~m%RVR|xUjqG&&G_>(#dJ-6bEDizbltTd?ghK(oMSd~NOUDal zdZ;j^gM1h~z=5WqFAO z&g}R5^BNUquD+gSd_zQo1rU=>PIyEof(WTNVGejBzE~;%W;!5saBR-C{`nDfGuIRP zJL0>4VST`lOrf8mpXVp#3E5tGRq{c8Ds*`jmyq<)(TpH zo*iDB%?gn!%!z)?I92Y)nb(486)hU1~y_d*I#(6Yi zW@iCq;z<*%Lcn0m)deKJHiCy{f(C~O{BZ`(ba`d>6r)`;knKn#v*9`t-+8(oO3TVf z!a-mT$1W6FGP^}GdnK8)JStOd2`j5Pyf#s7dorvPKQwtY5;$abx>Pm$39{h-{ZIz> z?`DbRTccVhde3Ek+)AppC4Yj2=R^>^L0u_dnIt5@K*B9ea18-dc>pfvo;(?8k!0AW zr>oi#gSSPK4Hun8j$S^c;>o!vWHqfvTVk$0>puqm_BPtwkbfJ{oW52{*zqjsg};0A z&th>u3l+cn)S$Ubr<>)!S*o#a-zaY{b{w-Kuy^|jewGK-L2p`{DK@64XxB|Qe=SgJ z8Bz;$|MQYj?0_ktJoV9#VsC>`iWD3Vt3Hs2}DU0U89D2?0I6d$zb$|AkRo{MD zTIEesoh=?IR)|#Eb0a55W7n`#iJ{96-y#LX4^AXF9nkqb#)3I#U;^quQ`Wjc|Gr5k-dq7t)0~ITmumX$737B>7uqx59tilJ{)jZHw&RsOMH}#Ny8gVX7J+zn~uS4jZ=wh zZn#K;fEw<7*B*U=B{=bk6*9`&?!niaJ{U;W?$7B z>NopZd{vl8!8Bkmjb4aG49elPZJo>>6i$offufX$@6lXsygTAVxn)Hb%zT|BHfb4U zVLbc7=~H%I9mK^tE+Uhpo-MQoyfB)CATIA-lyzaCO<}nOy?FJs)b}hm#nz!U^*)w> zTZDtHK~yZC`(?aUV}a@9>suWHddY|sL(~(0+eIF zjjwydGTrrb)iN-TI0va(L5gB>)-4<4`iC=zpWUbuxO~=xNrtb`aea!TH=Gm+x zeYLnr`bKlGUyO+)Oam10D(Z8PD5rur$wyNEq5G+2;0nWaXHYU2CH z=YKn!MaTq(Bn67bS*ge8v&CX==ei&sz_JSe_rpNhf<&8wsb(UO>gF{JK!@u{x~HM^yMm;Vw`xBm9$OUX3Djf-bA2-ZB~d~?5Dk8y2vi1X)^#%mtRwk|qwNd3%I_E0#QaLj1vnJ2x~d679Sr!mxTwyF&wqXiKbn z(i&V(^#;11gIf}|c;SGbl9`qHhFLT74Q}#Y?Gw`Qm@0qInsD^~3b(!Q78=!ewTNN- z(qw|)s~fDQzcJj)Hk*cV%cz7X>YZ?}4qiEN)9?f2V8S17mKx?JPaMhXd3etHy#xu| zT@#I{LWRuuRFNe-Txlr__ak@qnNu`E5kp|{R6uZ%k6Bg`(l)v<6AhTjDg_@Ty;rb| z1T@Yf2!XOo!j4-@pPItZ^AN9bT4R1d2YW9~b9Kwt#-D#`@=`TyKQ+ZL7|CMgvcSRA zAzDAh>*svd{gHob>qMjgc_29{PEh5}QWh~Cux!7Pi^?mIs2W$=&PPC@#Iy$ynX_*T#91GRBF`ddLN;U#ICmHOO_9lV z#QCj&HM%q%TKfi^oI`0+;MBn{z*k4ok-?KkqK-Kwp=W!-d&Nb|Pb29l_$oG@kEnaaRptHYMJ?$ffmf_Ki<;_ThN333<9 zd-b0)riU4L9WZ1e_$%q6>=#r(TP2X2KG}V^FDFPal|QdgYL}Z-4;~*I zyYRiTmSv+R=E}s}ucV6m+TNX!k@?I%e0ooLAAV1@9N7(f0pWu3sjPBi)at4GR3^kM z(gkHw7wCOf>~57+dZty$Mfn)}o~b={A-n8~+^}bLctIG;(>XZKd^8F&-Be=+p*!AR=3UO4&zvI_=2aB}iz`=Z9}0`e$$`tu$ zfhMlZ{(>8oxR?I^vBY(Ky?j^W(zXn1u`MTJHc;AhW!0P{1Qj>XdFWYJ-+Ace97@4w z0g0`gDS72Uy~50P++nX7?-|*4!rb9UT_JNj$WW(6U?_>egeL4yqU}o@II(ffDJU$N z5IQ^IzR8`}gbL}3iWpxd$)Pg|ieerLMa^z%vGx+}ghZ4v_YR{eIWcQYNe&mZMa+JF zlIe!lq3X(dUD11cP08FSt`aMbW}B)HAuBoA41B)0*lwY0|32nOlayrNI)@z!JzVJ$ z8JJG5}y=)%n>JX@s> z7Nw)&xOJH9rrxW%^tEx93l@|+hv)2$kuPAo^exee3Tj7;k~=XIB65)a6T)( zCBL#E1=UUtOhL8g5MmbXgD+yPBzK}pXi3v-qv>KE!&9$jO;xiCCkoYirhN^tgX#^Y zstwFnb511q+zXSzP??-l=4=VK#uHI-3-`HkpXa?Ud&+Z8X%~%1dq%G_lFO(J?=wQB z5yoV%ymnuhBuAQ*-nc(CwX@NP#^x1Wm7F|F4vf!=Pkqznbst?BK{1i=2&u&l7svQc z>e2$IoxajYmKAocPFt6PI3xk76rJi+5}gD!j)>K}W3wz{g?Pv#g$y+YU?DcKjP^cg z%UzZ&ZU5y~P1~DcJ?h-!+NXz6gsFiBRHrR?Sa$O->|2ce%d?D_gWEWbuGV_ZcQ0-; zg$6huXB=7whZdJerb0i8+5k;jY5Q6;xjf~I9-qpu`e}S z+G$XO;!Lrj9gdw1?r`m%av1LIpmc;5FgbdV3)s<3}xpY zM__>^5eBAe2U(HXpxBo9CT0`akGp73r)`jgbdY!2etTLL`3T(%c=Qf5DE<;mVsvqP zx6E7>S#bBf!hqT}9Wy;<_2}tftg4XH&3RdQUd^E-F2$~u!$>G6e~Q*d>TZM5o4n+b z)dMnx<00Ao?`0w)n7MP2R-IlcEC6fflpvlG?KPL^AmMRou|kFzmcGMoyZmgMu|MrA ztqy|c?5%~TJt4;whR*qVPyA~e)Lo>B8_k~0XE_y|Ek-~yhBMRYwbGQ7an;SEx#Hh@ zG9TqC*nw}zM`q#3J|=wQy+n~J~@xMz@A-4BfJhtka^L-2oL5 zzv|B15w6Q3Z5_$G{V`n9dp0N?)x@ZV{pJ;6WW>nxl22fyTg}23()zH~cFYDy}JP*f>&N)%Dlc^o{jTDDf8$CIxl?`52eTU5$=v=_+?$BK!aLA@`>6m zg-yb8s$pI`37R5uB~z21&q@;9^87-I|$(Ht-AF6F03Bh((+@;uT!Z}hsr^~Y}W88Lk+7Vk! zf@;W7Mdeu^Q|+TZG6u;V;;9_y*j zx!B(wak!u6HyV!*;x1dwYA8^YV20UE))c;J7=ncxH|pIkJOHWX)U*}XL{HHxMg@a~ z(Z>krvE!~+Yv_E1SMRnAvtQ9Na{c(e`BY_gu??wXtEmVsWo}zyRC5w$Q|Xt@BW1?4 z+5Sv9C)dwz%qeoE2hZ+cl6~;e8y4Czzi`~ccIB}e+su7W9Pfte$`!1=#jnnUn-IpL zN|UI@i3D0&Dc$+=8Pt)K3)hCv&|hJr3l`kfF-gj*t|kH|qxq9{6_UAO3Uk+#F&QZL z+dw&!BcK;t>8hh8+geiySn({sET{2zvK+@H$hN`QCRA=08zV%#4m3_)K9$6(4|a_bIl*9jfZ=K_je9?94y?AI)^VGy?Ki~)TO)}S}2 zp<$fYrNc?J)Mp@9cC%j=)LAdjKJZ)dM0yyROG}Jt{uV`}_nAuI=5!XsiNF+H_I-+nE`)#@w?8sb%xZ{)Xf+ zvyAH!Jt+zU98>-)XS+of$rV^>LB$^S{zHuYt+_QhxEG*nM!hs~n_|ARlt?*L3b~ZE zj7{LS>o2yt30>hMR_0>k76xa%M{>q|uNvfga|_Lpv*|VBUDY>To6M9_KtiX9YoL(9 zM#jdNYud50n)OrncaWtF7rTON0|cb4Pn&bM9@tX2azitr$m@!^1n&Gg-1_t`g?m`z zZ$_EB^I|nXuY^b1BU)0qa5%`_c|kQeTZ(Yk^lp}Yw1GGCWA@fLk#+qq-3fXG1A)=J zrWoJI65T1UO)+bH8As_mduoQxe7iBFa0xH2Pih*y>4!a}msi+z#-#xS8Iv>}c+fQF z9-<0S9ksYk>xPq@y51x-~$1^E31>Bad}9^)`qf-+t+2@BUf zaCL2XEhfL5Rin>1ub8S|>cK9r2_+9}Hmqrd8TG1lXZYX&p+cPlH?PrUFX0vQBYCXW zVT~`cW8)sjXC)q#_L$t&vtEl_(tUkKRz6;<$oQyv&9B*8-Hn*J4A|lH8&}Oga-yqa zTzpZ(I~D^rcIo>w>Og3Ow~$N74ST!B50>@e??x)?ANVd>=GSS4)@gcy>KbYu>yiPl zt6N2u+*H{xNDds#;i`MaSLZaDWgiQMXlO5pR0;-6+;D5=*Gfo)WVldkS%L>|1dm1V zhHguMmqsO_6TPCLUdhG~G_*CwiIc1F4j)rHQJ0lDM7vIye}LwR<=LVpBh6(kqQJl8 z9J0L-Y?Hb}`%&K_;SRRRG}R6t>Fo(o*96H^!s7{TraMzxRQJWm8AAmN3CXRKtSwTz zY!VgiIEPBYR=Z){(jyd$3C4sK1gR$em|s2T8oE?7BUuJ_x5Olzp@b7td#Bb+vQ9MT z>$YZvLb#AGm5RzXnwPy#^2=FuvUwu(0m(1j(BK0^jPvm0U}aYR+$8*4ug9M5R(bq{ zAif`e4#*iN z{SRSVfwFMy`wx!m5+5A`!7V=%hYsEJi&>IEz@x~;%S_ksxV-Pako-L+f}m97;ui{l z{~b!0u0ZIr|44##LI68}OT>TXks^}?1exPcv0--sfd^=+!iNHS9+0*H{|UgjPOnL` zA7B~e2u*&Xe_{OUK86EayUfG?Ph_FXLfe2{HbD2Og3GivP}f@;+sqNA;Au6#__dr} zd?ihm}RLN37YLrUttBVdA zXk+{PU!D%}ub_OHC@}SQP%B&KT3Ar^|sr%=; z_5SYncHE$odo$5KQvPPCY`4cg*O{PFOpw6(l=Wwvao?1RlLO5Qa4Jm;sXi+ zsG8qL7gRX}DNW%F$QIOZPC#fWx&kfZQwgP zv6Au8KcmZd2w!ByzV$=Ukc8b(>&;c8d7}yp1^`Ajtp;q>-f!NrJeH^?hhvOGHBEO+07Hqco_AGgq{V( zHqXYi@J*~&?%zFN54mW;y!*?BPJxHFN!Z#po@^LPsxNP{PA75Mn zLG|~PEQYOU_2aCt_?7=K zB3T#`ppd=(3r8Pfi|jr1n>8>u>6IKZ6zg!=Bi3o}SP-a>lf)Kl#|YFR+2WaWQqgrm z6?*%m>Z2^8;gz#3rkPnu@H#-%*@*C%63UB=GZDZT(s0R2PA3o|-S5;V?9+eDD4sN{ zS7gUUCxpERlNlAJ$=Nr3e&xtJnE1UU-z91Zl7zpFf20X~Bp}fcU96FtXhIkgpNgT^ z>`BCA?Be3=$_s>qvvu}`84sM=^VZee?PS@2;rz)(OKh{p{Tq4B8ZQd3Ai3}#Odzku zVLHVw1hcy|yk_nNqA`DGi2w&Nfd4P>Mo!XPb8ELB!qLw&=KDzj%BB8_`M1#vGvE9u zzV)R3HIY*^${U9bvj99lz7aK*r~)c$dA0OX=qnVpZdYOnt@E>!*2#F{TZo+V55Dk1 z#OQa{kR>oNUz{rV(>x;mOL8%`hXPW9Qnh?zt5dnSpyS%LQk#tW8%LTltXnrR`eaw`JV`-5#l`yr#np;<6(=jo;0i;1#DMCwxJ@TJ$~Owgw=KF6$VvUOD2_7E8Q+3cFri$(_LK zm;(IEV7!0p_%y|iDqAKcvMH$`yXUi)b9XICda8GUmDX6Z;(%qHVBXk^bKPxv>hW!@ z1@)O57~fvLq|NYPLPG_m_VyhmVW{`|DSVdEHcUcxhGVi5@!F>oa{cWJM3a-eS3k@x z_F7S<6c-xYW63D4b)|L%wQ34e9CG8Y)NR_c$DNIOvt_7`db@1X4K5xXIb1(q>)c9H zq>YI!nx$$hgaz{*t^jqe_%kdnXum;`PtXLo)^425TxtQyvrPCpDV18L z_f0)@Xt*HLn(8$rP65}9eMW%2=%Fjqk78_%{t&u2WVHBM?P%{SzqseKv*|Sl>~qoR zzNZz1=bs&E4MmUajFNSDDCAPI$3bHLTXUShhz*p)PAd(SKUR2eqQX~Z_@h|py;R@% z333shgFUr1QYx7i(XE!ivEQz>rN5#rr+?b!gWUCrS7$qUtfvOK_ojE#?w5w9x%Ag% zUgB0X>7UB^_*lZo78UIn8ST~A>hKF&YSsLB+Dq$+C_AZni?_NZJS9f+U$@m-;nCYz zg>K$L=+b~;N=gM;9b24Q3lwFEp%4DGl}SK?h+i@N1!0sXTpA7e;}alKoYX8aL=8Lr zaNBB6GvCFQZAI*r4RXWWF@oeW6wR#w?sX=c~3&`G4oo}n4TTp!#2P`eYQPFvhZVs z3W=4bv zGf$UV9#Bl)l&bY>0b-dhW~!=&5lh45r58?XxEfWQDNrL(RNJpl_SKS@-19Fb^xp#E z|LQAR-r~FQ3si6U;nM;#UeEAXa!R&J8k#}!A8tfdmfzl)HdAnNypkA-URa|?%pdR+ zfgY0Sio#y6B)q+!UWgd;6S`c@6S}dJI|E80M@f6;Mmr8ZZ63`KxA`_DQxP$C4{6qD zizQp&Y=ly3fkFlD%YP#psV`o&?M}4)L-t6Tu zbk1n*L^rMU;^&)sAL?uFFviQ~-AvA7_rCLd-g?lE-z!~v%@#6-<8Zd_ZzrWzI!?C=1D7mVo2QR(r#`Vi&NlI-e%Y?Ss2K?&8pgZuriug zG4^(W)&AzbK%f$}FuR0xc}#<AC<`Is$Z-)_W{LO_ZUAXVB!>5u&mA{U~2iqiW z!Sw`IR`HlZo(R$M=I_w1$bIEW4dk2fe}DE)z=Ru{*-<&y8YDB#ZIq<@b%7~=g)#sKHY1z+lmEr#V)l#$P`&(V4e-%w`8 znJHNj;h(x% zYNIdc}(EQfE|@H2wvF@aB-x&auo`W{N{` zHuwp4u4pq;>g$GT7@qBq&9ou5#-G%` z0jbl5voQtM#kW>U+jZv0hin$LQ*_Jt?`OaziqLq0RNlBiqb}gf(>}IekZvtoU{V)5 zfTmHq-Bl)deU*nARs?4=>8(;W-Kg47QSR2!iWuu04N@uz68&og6#=nbz~9*p%()_e3Fmhve^ z%C~6iJKVkSOg4RdRO#)j88!~@@UKA7BZjLTt1cY7JIpQOHy!J{=r2=NAFC*$eEQxf zeybC5`wP?p64U;EG#*(&y@U^cMprz6S_3>xA?KDjhZVEX4OW=-{@CD2o~|{U)7>{s zT8rjiXWm-PmBuOEvYnrPqvwGtaYorqu&J8>*MnvfCeyDL4ZePOpPTV33I`<~H104H z-<(ZTjo~o1<9+fbmt~mS6zi=Mt@+<_X@})+J_W!?I%UjPQGR@}-+RF_Z-|f=>A5xR zcE*KDSxk^}Wi={R&}a*rp9qB?il9D@zn~%cY^u6>xvB)**n(T<0IDqU8<(ro=t@DQ zM~Q`m0U%kg1Qg>(O&X{uv4lj2$H_HrSOVLDoZbjzRu&=)5%uG0H?U)2!K3~6AA}o7 z{Tn-P8hT3g{Hm^Yedc@{4{v8eVRxvU^oV$V>?_)D+}GbJu1kcp~ zT)`a6{^DwrIXosc7M6>&;fYHM+&vg-b6cRAgxO6GK3qq#VtSe zU%c60X3ffR8<=cx`*NF=-^giZj$CAW*y2OlTK26P&x{;|jk681nR8{b^}}@VvxB|A zjfpIdiwI0Zlp@-`;C|7_cX>epk6B)~Ke)z!nI8<25U6CRW33sS4ww@p4(!2M`uRI;nKo~-p1Oy3)5D^)|6d~3KNeJ^0rt|LrqEGD+ z+KY2jFW6q>$y(Wa?X}kazwdi@z*>Em{&-<0`&F27${ig7B%?I(vrMPgS?LW@Gqj|g z;Sf0g1p?=;;Q8Oi?7wH%HV_C;V(uwy zcL3?|c~Mmum|p}KSAZQgOBMPItEt)ReZZvy;%>0^Huh7)okmda&CuqXQs5Tup>xj*m&OX@QKEWjX%Nb09Ii>y~Kf<4e=F}TupfH7-GSmw~NVf`&g zEDxAjKmr-cg&PpTaNT&P0{O}SSNQ)2kkn_GO&rv~9X;7R&c#J0%@iHd(Sh28$>Zzy zmxcL~+Hn9EIru!@(s3me9r^66PtP-7nw1Aa)hwxN3Di83S@Xjz@L_jk3d3%~T;K?GIyw|*G~ zR*%BT@$2bwYfb;&U`@JofGj2RpABn-BEnGJJjY5`qA?Of&fFp`0}3%b zCJL|p{&>qHB#zU8q{%gvvymL=>S0zz(Yq2zxW4YLmDY#si$K{or8>V$I8z|30rA>E z((9sfsJlFy@ZO#_io_Rh(#0U9VtI8>3pTzTC%l#!jE5}S;pJD6tKO0-ClDht{HEf1 zA35c8tPv{cn_>n@75;*RnkHyWnx6Cd9)W38p8IT42k{&zl@QJ z2-8#q?fT*_&vZzaAc-A_!U8&FdUc&4cHOwUV;~6>!5Oy7Jc%o^uZ~il&8zPV_f6<) zc9B8v7N~zSyC;Li7sw{?n_-om#RC2nk3-F+1B2Kr7g}72ipGMEi*KY%XLevMzv4O* zEE1b#&VXr&KgS@@#QA}{YB53)(&LsMT2tfw>vZVzJwZ1OZ}pvBuOIK-wR9vO!qKx{ zh50!cv~i-NH0opnJV#y(q^)w;r$C+pxtzv~1JG@5&@Inhc z*`*s-U9m2$0%(F<*|%srfUIX&O!hH{Qn0?YNS#ljoh*ElD(29Ka4TC3;@2{QT?elR zv`W{%rEO3)aO>}~pX7EqDOZcJl2cU7C>dv~9LY|WzA9Ji%vb^p6mcsu$V+|S2CJk5 z6Zb9Gs3MR%w)2yty$p+R>4vtzfL6(R22EU9m0y+evNqEerr5%>$Kwj*wg$)o6y~fQ zwUG`y{+3F*NQ?){f=ZbfqsvNNQ6Nuu_H$4lgT5)Rk6wf{o2gz3(3hBDn+KGoJ7ZKZ zx1F-;qDaj6DeAi_yc)svO>obVe|O73?;b^O1Ad!pS*U+W^@tl*YlwVj}# zYVR3RVl*BQZmXR9IXpg z7?@XQFg%E)WvqZiok5U6G;zKfKCRT8s6@U}D}DniXh~I@Cngp~tX5-`sUHoJ9c5?1 z`)Q$IFZF_fh?lHK#ARi5he0pakw5u3Q^Tz-D+51F^ot(M27%21UITU|A!g^OA-?@t zv?Hg|6<<@NT_m8tn=Ip!1-ox(ElZ8x!yfeY<*V?J?!cadcNEbZ0E zJNbi>Dd|O+Zm&%qvu(_=JKw8UbrY_mbZMkE!C8H){G53th3XE`APy}+HlIn%V&`@bQYW$>Ddy+Y> zI>$G~m>%Ldc)Lz@B(;RyBNLugNqCPPllF93e_(5&hQ{wAp#=lfiov)Og)2hLQTi?Jvfw2vR%C6${uuPSO5hwtV=|A3(>z567sAf-wapTlP;gnUPfo_wFb3R2^ zP)Xdj@Dzf=fZedR&2*s!!S4JyUP+~n=En$e`! zKnqoCUDe<$sq(bC+m}!kKSAQ;v$}DOD-9@%HsNs0?)}ZS!e$6 zsoSOPY2k6~HS$QkePQkl2+*E7_DZu#D58gP+F<>loGCc>afJ8&S*>o|2^d>@IS{G| zb&xR#&Afq+JG;ZKDlK8^2P`Z<0fU8I=l_%HV`D?KJ1!WOeeX!vA zw>dY^Ju?jBG^^kR9##TE7Ir^NdHoXV&j=kkU-3RrPgYp74r)#3PQH1OQ621mS4&jz z8jMZaQObA)QsY(NT5RbocDpVoa6_)#k9draLRg6R3HDB*XzmiyWlmf!-&N8;{cVDf zR@|^WbZP~6sRla;!)_asPOHE^u^*GZ@SrMILw<5?-RK%K>x?$P<}lsPuO`r~&qvG0;G{R-CzNVw9k?f~l{!6c zp{3}`(nTA*J~o#L&M6NInX)0vLuADjMWq#d-;f-ohi37-E(|b+USt?@H{DY8_4dJ* zYcS)n#<~+n%<|qf>Ge`Fd9nU_w%Pp-GVdqN%Y#7U&yGT>{olYG&Sk6 z$*IL4#}R}jvrlpRd1YqpRora4Yjm7{`##(=m^eUvifn#@xj&%UN?`k+7>`KlNwl!y z#JW*Kbca^At@nRgQNV`uV;YE3D}`?MFwCsJ>KNk>aG>jW(-7*DL}LMQ)^)R>c_68b z;IY{B>5vhcZ(CaTbWAImJ6!%1CAE7I3*)dn^Q1vPbrQ3?7<35cBMl?ulX&GKeGSuFnAmE2%0T5Jf5vvy6FSP89r#h@!f>05wx0O4^=1Cu^BJVC7+nSwtCBW=b{o^E6T zdK*}YA9;)ZH-QG6M4v@H0lnrEOATU5nt5Mm6PBkg>2 zhQL>a>}NjMQ^1U}Ih~pCQ-RTIiY<_m=k(t%8vzhFJ6KuZS#p}$vF|wF$FlpMOMoz* z{<#ES!6+uS#5-ATL@8@s1+gTnV34e9Lz*(25A(u%HaRnN?iShJWSy@Ed@i6ZGD`c*R_CV3{q)v>{N=UIwP<@< zqV0FgGpezZ;`Gs#Ubc)yoz4SZne3YMfG2se4z%6eL(qzt8s|_VR}ntUL9tzF?Z8sfVo#l9k-%4-{?zfshbjy(1tjtkuMb6JX zXs)Ca+bcD)GD7y?^&|=1&DY`R$28D~<16^;190TUNv}Kz$HIP@&2a4W5P6w%iujzl S`1HTv-@$!G`h-1}KmHeq#@zn^ literal 0 HcmV?d00001 diff --git a/logo/text_match.png b/logo/text_match.png new file mode 100644 index 0000000000000000000000000000000000000000..08edabea7a3a36d2f91dbc671e07f96d5c877866 GIT binary patch literal 105974 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�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 io.milvus milvus-sdk-java - 2.4.4 + 2.5.0 org.apache.logging.log4j diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/AnalyzerParams.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/AnalyzerParams.java new file mode 100644 index 0000000..3350411 --- /dev/null +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/AnalyzerParams.java @@ -0,0 +1,21 @@ +package org.dromara.milvus.plus.annotation; + +import org.dromara.milvus.plus.model.TokenizerType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 表示分析器参数的注解,包含分词器和过滤器列表。 + */ +@Target(ElementType.ANNOTATION_TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnalyzerParams { + + TokenizerType tokenizer() default TokenizerType.standard; // 分词器配置 + BuiltInFilter[] builtInFilters() default {}; //内置过滤器 + CustomFilter[] customFilters() default {}; //自定义过滤器 + +} \ No newline at end of file diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/BuiltInFilter.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/BuiltInFilter.java new file mode 100644 index 0000000..cdb2f60 --- /dev/null +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/BuiltInFilter.java @@ -0,0 +1,17 @@ +package org.dromara.milvus.plus.annotation; + +import org.dromara.milvus.plus.model.BuiltInFilterType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 定义内置过滤器的注解。 + */ +@Target(ElementType.ANNOTATION_TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface BuiltInFilter { + BuiltInFilterType name() default BuiltInFilterType.lowercase; +} \ No newline at end of file diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/CustomFilter.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/CustomFilter.java new file mode 100644 index 0000000..6aaa63d --- /dev/null +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/CustomFilter.java @@ -0,0 +1,17 @@ +package org.dromara.milvus.plus.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 定义自定义过滤器的注解。 + */ +@Target(ElementType.ANNOTATION_TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface CustomFilter { + String type() default ""; + int max() default 0; + String[] stopWords() default {}; +} \ No newline at end of file diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/MilvusField.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/MilvusField.java index bbd4942..ca9dfb4 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/MilvusField.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/annotation/MilvusField.java @@ -67,4 +67,21 @@ public @interface MilvusField { * 是否为分区键 */ boolean isPartitionKey() default false; + + /** + * 启动分析器 + */ + boolean enableAnalyzer() default false; + + /** + * + * 启用文本匹配 + */ + boolean enableMatch() default false; + + /** + * 分析器参数。 + */ + AnalyzerParams analyzerParams() default @AnalyzerParams; + } \ No newline at end of file diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/builder/CollectionSchemaBuilder.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/builder/CollectionSchemaBuilder.java index 2c23551..59d7854 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/builder/CollectionSchemaBuilder.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/builder/CollectionSchemaBuilder.java @@ -7,6 +7,9 @@ import io.milvus.v2.common.IndexParam; import io.milvus.v2.service.collection.request.AddFieldReq; import io.milvus.v2.service.collection.request.CreateCollectionReq; import io.milvus.v2.service.index.request.CreateIndexReq; + +import java.util.List; + /** * @author xgc **/ @@ -17,6 +20,8 @@ public class CollectionSchemaBuilder { private final CreateCollectionReq.CollectionSchema schema; private ConsistencyLevel consistencyLevel=ConsistencyLevel.BOUNDED; private Boolean enableDynamicField=false; + private List functions; + public CollectionSchemaBuilder(Boolean enableDynamicField,String collectionName, MilvusClientV2 wrapper) { this.collectionName = collectionName; @@ -40,6 +45,11 @@ public class CollectionSchemaBuilder { } return this; } + public void addFun(List functions){ + for (CreateCollectionReq.Function function : functions) { + schema.addFunction(function); + } + } public void addConsistencyLevel(ConsistencyLevel level){ this.consistencyLevel=level; } diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java index 7d6c027..c1daf04 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java @@ -2,10 +2,13 @@ package org.dromara.milvus.plus.converter; import com.google.common.collect.Lists; +import io.milvus.common.clientenum.FunctionType; import io.milvus.v2.client.MilvusClientV2; import io.milvus.v2.common.ConsistencyLevel; +import io.milvus.v2.common.DataType; import io.milvus.v2.common.IndexParam; import io.milvus.v2.service.collection.request.AddFieldReq; +import io.milvus.v2.service.collection.request.CreateCollectionReq; import io.milvus.v2.service.collection.request.GetLoadStateReq; import io.milvus.v2.service.collection.request.LoadCollectionReq; import io.milvus.v2.service.partition.request.CreatePartitionReq; @@ -20,6 +23,8 @@ import org.dromara.milvus.plus.cache.ConversionCache; import org.dromara.milvus.plus.cache.MilvusCache; import org.dromara.milvus.plus.cache.PropertyCache; import org.dromara.milvus.plus.model.MilvusEntity; +import org.dromara.milvus.plus.util.AnalyzerParamsUtils; +import org.dromara.milvus.plus.util.GsonUtil; import org.springframework.util.CollectionUtils; import java.lang.reflect.Field; @@ -84,6 +89,7 @@ public class MilvusConverter { // 用于存储属性与函数映射的缓存 PropertyCache propertyCache = new PropertyCache(); List fields = getAllFieldsFromClass(entityClass); + List functions=new ArrayList<>(); // 遍历实体类的所有字段,读取@MilvusField注解信息 for (Field field : fields) { MilvusField fieldAnnotation = field.getAnnotation(MilvusField.class); @@ -106,8 +112,35 @@ public class MilvusConverter { .isPrimaryKey(fieldAnnotation.isPrimaryKey()) .isPartitionKey(fieldAnnotation.isPartitionKey()) .elementType(fieldAnnotation.elementType()) + .enableAnalyzer(fieldAnnotation.enableAnalyzer()) + .enableMatch(fieldAnnotation.enableMatch()) .autoID(false); autoID=autoID?autoID:fieldAnnotation.autoID(); + + if(fieldAnnotation.enableAnalyzer()&&fieldAnnotation.dataType()==DataType.VarChar){ + Map analyzerParams = AnalyzerParamsUtils.convertToMap(fieldAnnotation.analyzerParams()); + log.info("-----------analyzerParams--------- \n"+ GsonUtil.toJson(analyzerParams)); + builder.analyzerParams(analyzerParams); + //构建该文本对应的SPARSE_FLOAT_VECTOR向量字段 + AddFieldReq sparse = AddFieldReq.builder().fieldName(fieldName + "_sparse").dataType(DataType.SparseFloatVector).build(); + milvusFields.add(sparse); + //构建索引 + IndexParam sparseIndex = IndexParam.builder() + .indexName(fieldName + "_sparse_index") + .fieldName(fieldName + "_sparse") + .indexType(IndexParam.IndexType.AUTOINDEX) + .metricType(IndexParam.MetricType.BM25) + .build(); + indexParams.add(sparseIndex); + //定义一个函数,将文本转换为稀疏向量 + String funName = fieldName+"_bm25_emb"; + CreateCollectionReq.Function fun= CreateCollectionReq.Function.builder(). + name(funName). + functionType(FunctionType.BM25). + inputFieldNames(Lists.newArrayList(fieldName)). + outputFieldNames(Lists.newArrayList(fieldName + "_sparse")).build(); + functions.add(fun); + } // 描述 Optional.of(fieldAnnotation.description()) .filter(StringUtils::isNotEmpty).ifPresent(builder::description); @@ -134,6 +167,7 @@ public class MilvusConverter { // 设置Milvus字段和索引参数 milvus.setMilvusFields(milvusFields); milvus.setIndexParams(indexParams); + milvus.setFunctions(functions); // 缓存转换结果和集合信息 ConversionCache conversionCache = new ConversionCache(); conversionCache.setMilvusEntity(milvus); @@ -226,8 +260,10 @@ public class MilvusConverter { ); schemaBuilder.addField(milvusEntity.getMilvusFields().toArray(new AddFieldReq[0])); schemaBuilder.addConsistencyLevel(milvusEntity.getConsistencyLevel()); + schemaBuilder.addFun(milvusEntity.getFunctions()); log.info("-------create schema---------"); schemaBuilder.createSchema(); + log.info("-------create schema fun---------"); schemaBuilder.createIndex(indexParams); log.info("-------create index---------"); // 创建分区 diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java index 9ffdd4d..dc4fcfc 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java @@ -41,8 +41,10 @@ public class SearchRespConverter { Map entityMap = new HashMap<>(); for (Map.Entry entry : searchResult.getEntity().entrySet()) { String key = propertyCache.findKeyByValue(entry.getKey()); - Object value = entry.getValue(); - entityMap.put(key,value); + if(key!=null){ + Object value = entry.getValue(); + entityMap.put(key,value); + } } // 将转换后的Map转换为Java实体类T T entity = GsonUtil.convertMapToType(entityMap, entityType); @@ -111,9 +113,10 @@ public class SearchRespConverter { // 通过属性缓存转换键名,以适应Java实体的字段命名 for (Map.Entry entry : entityMap.entrySet()) { String key = propertyCache.findKeyByValue(entry.getKey()); - Object value = entry.getValue(); - entityMap2.put(key,value); - + if(key!=null){ + Object value = entry.getValue(); + entityMap2.put(key,value); + } } // 使用转换工具将映射后的Map转换为指定类型的实体 T entity = GsonUtil.convertMapToType(entityMap2, entityType); diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/ConditionBuilder.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/ConditionBuilder.java index 862d4f3..43532fe 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/ConditionBuilder.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/ConditionBuilder.java @@ -1,6 +1,7 @@ package org.dromara.milvus.plus.core.conditions; import org.dromara.milvus.plus.core.FieldFunction; +import org.springframework.util.CollectionUtils; import java.lang.reflect.Field; import java.util.ArrayList; @@ -15,6 +16,7 @@ import java.util.stream.Collectors; public abstract class ConditionBuilder { protected List filters = new ArrayList<>(); + protected List textMatches =new ArrayList<>(); protected Map getPropertiesMap(T t) { Map propertiesMap = new HashMap<>(); Class clazz = t.getClass(); @@ -35,6 +37,34 @@ public abstract class ConditionBuilder { return propertiesMap; // 返回包含属性名和属性值的Map } + + /** + * 添加 TEXT_MATCH 条件,使用 FieldFunction,支持多个值。 + * + * @param fieldName 字段函数 + * @param values 要匹配的值列表 + * @return 当前条件构建器对象 + */ + protected ConditionBuilder textMatch(String fieldName, List values) { + String joinedValues = String.join(" ", values); + String match = "TEXT_MATCH(" + wrapFieldName(fieldName) + ", '" + joinedValues + "')"; + textMatches.add(match); + return this; + } + protected ConditionBuilder textMatch(String fieldName, String value) { + String match = "TEXT_MATCH(" + wrapFieldName(fieldName) + ", '" + value + "')"; + textMatches.add(match); + return this; + } + protected ConditionBuilder textMatch(FieldFunction fieldName, String value) { + textMatch(fieldName.getFieldName(fieldName),value); + return this; + } + protected ConditionBuilder textMatch(FieldFunction fieldName, List values) { + textMatch(fieldName.getFieldName(fieldName),values); + return this; + } + /** * 添加等于条件。 * @@ -354,6 +384,10 @@ public abstract class ConditionBuilder { * @return 构建好的过滤条件字符串 */ protected String buildFilters(){ + if(!CollectionUtils.isEmpty(textMatches)){ + String textMatchFilter = textMatches.stream().collect(Collectors.joining(" and ")); + filters.add(textMatchFilter); + } return filters.stream().collect(Collectors.joining(" && ")); } diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaDeleteWrapper.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaDeleteWrapper.java index a38d771..034937b 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaDeleteWrapper.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaDeleteWrapper.java @@ -578,6 +578,54 @@ public class LambdaDeleteWrapper extends AbstractChainWrapper implements } return this; } + /** + * 添加 TEXT_MATCH 条件,使用 FieldFunction,支持多个值。 + * + * @param fieldName 字段函数 + * @param values 要匹配的值列表 + * @return 当前条件构建器对象 + */ + public LambdaDeleteWrapper textMatch(String fieldName, List values) { + super.textMatch(fieldName,values); + return this; + } + public LambdaDeleteWrapper textMatch(String fieldName, String value) { + super.textMatch(fieldName,value); + return this; + } + public LambdaDeleteWrapper textMatch(FieldFunction fieldName, String value) { + super.textMatch(fieldName,value); + return this; + } + public LambdaDeleteWrapper textMatch(FieldFunction fieldName, List values) { + super.textMatch(fieldName,values); + return this; + } + public LambdaDeleteWrapper textMatch(boolean condition,String fieldName, List values) { + if(condition){ + super.textMatch(fieldName,values); + } + return this; + } + public LambdaDeleteWrapper textMatch(boolean condition,String fieldName, String value) { + if(condition){ + super.textMatch(fieldName,value); + } + return this; + } + public LambdaDeleteWrapper textMatch(boolean condition,FieldFunction fieldName, String value) { + if(condition){ + super.textMatch(fieldName,value); + } + return this; + } + public LambdaDeleteWrapper textMatch(boolean condition,FieldFunction fieldName, List values) { + if(condition){ + super.textMatch(fieldName,values); + } + return this; + } + // Logic operations public LambdaDeleteWrapper and(ConditionBuilder other) { diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java index c4b2c01..a6fb126 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java @@ -5,6 +5,7 @@ import io.milvus.v2.client.MilvusClientV2; import io.milvus.v2.common.ConsistencyLevel; import io.milvus.v2.service.vector.request.*; import io.milvus.v2.service.vector.request.data.BaseVector; +import io.milvus.v2.service.vector.request.data.EmbeddedText; import io.milvus.v2.service.vector.request.data.FloatVec; import io.milvus.v2.service.vector.request.ranker.BaseRanker; import io.milvus.v2.service.vector.response.GetResp; @@ -677,6 +678,18 @@ public class LambdaQueryWrapper extends AbstractChainWrapper implements Wr vectors.add(baseVector); return this; } + public LambdaQueryWrapper textVector(FieldFunction annsField, String vector) { + this.annsField=annsField.getFieldName(annsField)+"_sparse"; + BaseVector baseVector = new EmbeddedText(vector); + vectors.add(baseVector); + return this; + } + public LambdaQueryWrapper textVector(String annsField,String vector) { + this.annsField=annsField+"_sparse"; + BaseVector baseVector = new EmbeddedText(vector); + vectors.add(baseVector); + return this; + } public LambdaQueryWrapper vector(BaseVector vector) { vectors.add(vector); @@ -705,6 +718,55 @@ public class LambdaQueryWrapper extends AbstractChainWrapper implements Wr this.setTopK(topK); return this; } + + /** + * 添加 TEXT_MATCH 条件,使用 FieldFunction,支持多个值。 + * + * @param fieldName 字段函数 + * @param values 要匹配的值列表 + * @return 当前条件构建器对象 + */ + public LambdaQueryWrapper textMatch(String fieldName, List values) { + super.textMatch(fieldName,values); + return this; + } + public LambdaQueryWrapper textMatch(String fieldName, String value) { + super.textMatch(fieldName,value); + return this; + } + public LambdaQueryWrapper textMatch(FieldFunction fieldName, String value) { + super.textMatch(fieldName,value); + return this; + } + public LambdaQueryWrapper textMatch(FieldFunction fieldName, List values) { + super.textMatch(fieldName,values); + return this; + } + public LambdaQueryWrapper textMatch(boolean condition,String fieldName, List values) { + if(condition){ + super.textMatch(fieldName,values); + } + return this; + } + public LambdaQueryWrapper textMatch(boolean condition,String fieldName, String value) { + if(condition){ + super.textMatch(fieldName,value); + } + return this; + } + public LambdaQueryWrapper textMatch(boolean condition,FieldFunction fieldName, String value) { + if(condition){ + super.textMatch(fieldName,value); + } + return this; + } + public LambdaQueryWrapper textMatch(boolean condition,FieldFunction fieldName, List values) { + if(condition){ + super.textMatch(fieldName,values); + } + return this; + } + /** * 构建完整的搜索请求 * @return 搜索请求对象 diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java index ae31757..e521a54 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java @@ -583,6 +583,54 @@ public class LambdaUpdateWrapper extends AbstractChainWrapper implements W } return this; } + /** + * 添加 TEXT_MATCH 条件,使用 FieldFunction,支持多个值。 + * + * @param fieldName 字段函数 + * @param values 要匹配的值列表 + * @return 当前条件构建器对象 + */ + public LambdaUpdateWrapper textMatch(String fieldName, List values) { + super.textMatch(fieldName,values); + return this; + } + public LambdaUpdateWrapper textMatch(String fieldName, String value) { + super.textMatch(fieldName,value); + return this; + } + public LambdaUpdateWrapper textMatch(FieldFunction fieldName, String value) { + super.textMatch(fieldName,value); + return this; + } + public LambdaUpdateWrapper textMatch(FieldFunction fieldName, List values) { + super.textMatch(fieldName,values); + return this; + } + public LambdaUpdateWrapper textMatch(boolean condition,String fieldName, List values) { + if(condition){ + super.textMatch(fieldName,values); + } + return this; + } + public LambdaUpdateWrapper textMatch(boolean condition,String fieldName, String value) { + if(condition){ + super.textMatch(fieldName,value); + } + return this; + } + public LambdaUpdateWrapper textMatch(boolean condition,FieldFunction fieldName, String value) { + if(condition){ + super.textMatch(fieldName,value); + } + return this; + } + public LambdaUpdateWrapper textMatch(boolean condition,FieldFunction fieldName, List values) { + if(condition){ + super.textMatch(fieldName,values); + } + return this; + } + // Logic operations public LambdaUpdateWrapper and(ConditionBuilder other) { diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/BuiltInFilterType.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/BuiltInFilterType.java new file mode 100644 index 0000000..edc545a --- /dev/null +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/BuiltInFilterType.java @@ -0,0 +1,8 @@ +package org.dromara.milvus.plus.model; + +/** + * 枚举表示内置的过滤器类型。 + */ +public enum BuiltInFilterType { + lowercase, asciifolding, alphanumonly, cnalphanumonly, cncharonly, stop, length, stemmer +} \ No newline at end of file diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/MilvusEntity.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/MilvusEntity.java index 2ee7ad1..e5cbe7f 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/MilvusEntity.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/MilvusEntity.java @@ -3,6 +3,7 @@ package org.dromara.milvus.plus.model; import io.milvus.v2.common.ConsistencyLevel; import io.milvus.v2.common.IndexParam; import io.milvus.v2.service.collection.request.AddFieldReq; +import io.milvus.v2.service.collection.request.CreateCollectionReq; import lombok.Data; import java.util.List; @@ -19,4 +20,5 @@ public class MilvusEntity { private List partitionName; private ConsistencyLevel consistencyLevel; private Boolean enableDynamicField; + private List functions; } diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/TokenizerType.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/TokenizerType.java new file mode 100644 index 0000000..61f2e40 --- /dev/null +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/TokenizerType.java @@ -0,0 +1,8 @@ +package org.dromara.milvus.plus.model; + +/** + * 枚举表示内置的分词器类型。 + */ +public enum TokenizerType { + standard, whitespace, english, chinese +} \ No newline at end of file diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/util/AnalyzerParamsUtils.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/util/AnalyzerParamsUtils.java new file mode 100644 index 0000000..7d8bc08 --- /dev/null +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/util/AnalyzerParamsUtils.java @@ -0,0 +1,47 @@ +package org.dromara.milvus.plus.util; + +import com.google.common.collect.Lists; +import org.dromara.milvus.plus.annotation.AnalyzerParams; +import org.dromara.milvus.plus.annotation.BuiltInFilter; +import org.dromara.milvus.plus.annotation.CustomFilter; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AnalyzerParamsUtils { + + public static Map convertToMap(AnalyzerParams analyzerParams) { + Map paramsMap = new HashMap<>(); + if (analyzerParams != null) { + // 设置分词器 + paramsMap.put("tokenizer", analyzerParams.tokenizer().name().toLowerCase()); + // 处理内置过滤器 + List builtInFiltersList = new ArrayList<>(); + for (BuiltInFilter builtInFilter : analyzerParams.builtInFilters()) { + builtInFiltersList.add(builtInFilter.name().name()); + } + // 处理自定义过滤器 + List> customFiltersList = new ArrayList<>(); + for (CustomFilter customFilter : analyzerParams.customFilters()) { + Map filterMap = new HashMap<>(); + filterMap.put("type", customFilter.type()); + if (customFilter.max() > 0) { + filterMap.put("max", customFilter.max()); + } + if (customFilter.stopWords().length > 0) { + filterMap.put("stopWords", new ArrayList<>(Lists.newArrayList(customFilter.stopWords()))); + } + customFiltersList.add(filterMap); + } + // 合并过滤器列表 + List filters = new ArrayList<>(); + filters.addAll(builtInFiltersList); + filters.addAll(customFiltersList); + paramsMap.put("filter", filters); + } + return paramsMap; + } + +} \ No newline at end of file diff --git a/milvus-solon-demo/src/main/java/org/dromara/solon/DemoController.java b/milvus-solon-demo/src/main/java/org/dromara/solon/DemoController.java index a16c1d8..9b8312c 100755 --- a/milvus-solon-demo/src/main/java/org/dromara/solon/DemoController.java +++ b/milvus-solon-demo/src/main/java/org/dromara/solon/DemoController.java @@ -1,14 +1,14 @@ package org.dromara.solon; -import com.alibaba.fastjson.JSONObject; -import org.dromara.milvus.plus.model.vo.MilvusResp; -import org.dromara.milvus.plus.model.vo.MilvusResult; -import org.dromara.solon.test.model.Face; -import org.dromara.solon.test.test.FaceMilvusMapper; import io.milvus.v2.service.vector.response.DeleteResp; import io.milvus.v2.service.vector.response.InsertResp; import io.milvus.v2.service.vector.response.UpsertResp; import lombok.extern.slf4j.Slf4j; +import org.dromara.milvus.plus.model.vo.MilvusResp; +import org.dromara.milvus.plus.model.vo.MilvusResult; +import org.dromara.milvus.plus.util.GsonUtil; +import org.dromara.solon.test.model.Face; +import org.dromara.solon.test.test.FaceMilvusMapper; import org.noear.solon.annotation.Controller; import org.noear.solon.annotation.Get; import org.noear.solon.annotation.Inject; @@ -49,35 +49,35 @@ public class DemoController { face1.setFaceVector(vector1); faces.add(face1); } - MilvusResp insert = mapper.insert(faces.toArray(faces.toArray(new Face[0]))); log.info("insert--{}", JSONObject.toJSONString(insert)); + MilvusResp insert = mapper.insert(faces.toArray(faces.toArray(new Face[0]))); log.info("insert--{}", GsonUtil.toJson(insert)); //id查询 MilvusResp>> query = mapper.getById(9l); - log.info("query--getById---{}", JSONObject.toJSONString(query)); + log.info("query--getById---{}", GsonUtil.toJson(query)); //向量查询 MilvusResp>> query1 = mapper.queryWrapper() .vector(Face::getFaceVector, vector) .ne(Face::getPersonId, 1L) .topK(3) .query(); - log.info("向量查询 query--queryWrapper---{}", JSONObject.toJSONString(query1)); + log.info("向量查询 query--queryWrapper---{}", GsonUtil.toJson(query1)); //标量查询 MilvusResp>> query2 = mapper.queryWrapper() .eq(Face::getPersonId, 2L) .topK(3) .query(); - log.info("标量查询 query--queryWrapper---{}", JSONObject.toJSONString(query2)); + log.info("标量查询 query--queryWrapper---{}", GsonUtil.toJson(query2)); //更新 vector.clear(); for (int i = 0; i < 128; i++) { vector.add((float) (Math.random() * 100)); // 这里仅作为示例使用随机数 } - MilvusResp update = mapper.updateById(face);log.info("update--{}", JSONObject.toJSONString(update)); + MilvusResp update = mapper.updateById(face);log.info("update--{}", GsonUtil.toJson(update)); //id查询 - MilvusResp>> query3 = mapper.getById(1L);log.info("query--getById---{}", JSONObject.toJSONString(query3)); + MilvusResp>> query3 = mapper.getById(1L);log.info("query--getById---{}", GsonUtil.toJson(query3)); //删除 - MilvusResp remove = mapper.removeById(1L);log.info("remove--{}", JSONObject.toJSONString(remove)); + MilvusResp remove = mapper.removeById(1L);log.info("remove--{}",GsonUtil.toJson(remove)); //查询 - MilvusResp>> query4 = mapper.getById(1L);log.info("query--{}", JSONObject.toJSONString(query4)); + MilvusResp>> query4 = mapper.getById(1L);log.info("query--{}", GsonUtil.toJson(query4)); } } \ No newline at end of file diff --git a/milvus-spring-demo/pom.xml b/milvus-spring-demo/pom.xml index 9e6d104..1cfcd7e 100644 --- a/milvus-spring-demo/pom.xml +++ b/milvus-spring-demo/pom.xml @@ -21,7 +21,7 @@ org.dromara.milvus-plus milvus-plus-boot-starter - 2.1.7 + 2.1.8 diff --git a/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java b/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java index 3f0d249..427c46f 100644 --- a/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java +++ b/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java @@ -37,25 +37,40 @@ public class ApplicationRunnerTest implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws InterruptedException { - milvusService.dropCollection("face_collection"); // insertFace(); // selectFace(12); -//// selectFace(11); +// selectFace(11); // delFace(11); // Thread.sleep(10000); // countFace(22); // getByIdTest(); // vectorQuery(); // scalarQuery(); - //update(); +// update(); + selectTextEmbedding(); } + private void selectTextEmbedding(){ + MilvusResp>> xx = mapper + .queryWrapper() + .textVector(Face::getText, "whats the focus of information retrieval?") + .textMatch(Face::getText,"retrieval") + .topK(2) + .query(); + System.out.println("==="); + } private void selectFace(Integer temp){ MilvusResp>> query = mapper. queryWrapper() .eq(Face::getTemp, temp) .query(Face::getPersonName,Face::getTemp); log.info("query temp 11--{}", GsonUtil.toJson(query)); + + LambdaQueryWrapper mapper = milvusService.ofQuery(Face.class); + MilvusResp>> test = mapper + .eq(Face::getPersonName, "test") + .topK(1) + .query(); } private void countFace(Integer temp){ MilvusResp query = mapper. @@ -69,7 +84,7 @@ public class ApplicationRunnerTest implements ApplicationRunner { log.info("del temp 11 --{}", GsonUtil.toJson(remove)); } private void insertFace() { - List faces = LongStream.range(1, 10) + List faces = LongStream.range(1, 2) .mapToObj(i -> { Face faceTmp = new Face(); // faceTmp.setPersonId(i); @@ -84,6 +99,7 @@ public class ApplicationRunnerTest implements ApplicationRunner { person.setImages(Lists.newArrayList("https://baidu.com")); faceTmp.setPerson(person); faceTmp.setTemp(i%2==0?11:22); + faceTmp.setText(i % 2 == 0 ?"nformation retrieval is a field of study.":"information retrieval focuses on finding relevant information in large datasets."); return faceTmp; }) .collect(Collectors.toList()); diff --git a/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/model/Face.java b/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/model/Face.java index 4d3f38b..f9fa7ab 100644 --- a/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/model/Face.java +++ b/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/model/Face.java @@ -38,6 +38,14 @@ public class Face { ) private Integer temp; + @MilvusField( + name = "text", + dataType = DataType.VarChar, + enableAnalyzer = true, + enableMatch = true + ) + private String text; // 文本 + @MilvusField( name = "face_vector", // 字段名称 dataType = DataType.FloatVector, // 数据类型为浮点型向量