基于java与elasticsearch引擎提供的ai绘图中文tag检索系统
elasticsearch版本:7.12.1
java:jdk17
在main目录的application.yaml中更改
在项目test目录
test中有批量导入的测试方法
注意:导入前请提前转换为 中文=英文 形式的properties文件
为提升检索吻合度,请装载elasticsearch引擎的ik分词器插件,并导入一份只留有中文的分词文档
索引文档将持续整理更新
精准查询
请求方式:Get
请求地址:/index/termTags
请求参数:chineseTags 中文字符串 单条直接传,多条查询请用 , 分隔
返回体:
单条查询
[
"cat_ears"
]
多条查询
[
"cat_ears",
"dog_ears"
]
模糊查询
请求方式:Get
请求地址:/index/matchTags
请求参数:chineseTags 中文字符串
返回体:
[
"dog_ears",
"day",
"cat_ears"
]
相关度检索
请求方式:Get
请求地址:/index/listTags
请求参数:chineseTags 中文字符串
返回体:
{
"狗耳": "dog_ears",
"猫耳": "cat_ears",
"白天": "day"
}
暂未实现功能**[需要网页端]**
1.根据用户输入内容搜索框动态展示联想tags
2.待定...
3.待定..
目前存在的问题以及方案:
es引擎的ik分词器在分词时会使用粗粒度分词和细粒度分词的两种规则,如果导入文档时使用细粒度分词,查询时使用粗粒度分词,虽然能得到全部想要的词缀,但也会生成一些意想不到的tag
而如果全部使用粗粒度分词,虽然保证了查询的可靠性,但搜索tags难度会增加,需要高匹配的情况下才能搜到;全部使用细粒度的话,查询的内容会杂乱不堪,这对于用户体验来讲将是一个灾难
为解决这个问题,我不得不把索引库拆成两份用不同的规则实现,在精准查询(这个其实不受影响)和模糊查询时,导入文档和查询tags全部使用粗粒度分词,这样如果想直接对接ai绘图的接口话tag吻合度会更好; 使用列表查询时,导入文档使用细粒度分词,查询tags使用粗粒度分词,这样会展示出所有具有相关性的tags