Which Manticore product(s) do you use
What do you like about the Manticore product(s) you use?
What features or functionalities do you think are missing?
Are there any specific improvements or changes you would like to see?
How would you rate your overall experience with Manticore product(s)?
How did you find out about Manticore, if you remember?
我需要查询 map 集合内某个 key 为某个值的数据。如果是把 map 集合转为 json 作为一个字段存到 ES 的应该可以解决,因为这种情况下我的字段名是固定的,我只需要将查询条件分词,然后根据字段名去和对应的 json 去匹配就可以了。
但是如果 map 的 key 是 index 的字段名应该如何搜索呢?
比如查询输入的是 手机品牌(字段名) 小米(值),但是 map 的 key 只有 品牌(字段名) 比如查询输入的是 价格(字段名) 21 (值),但是 map 的 key 只有 手机价格(字段名)
代码如下: 这段代码中 params 变量的 key 会作为字段名,value 会作为字段值
@Data @NoArgsConstructor @AllArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) @Document(indexName = "test_index") public class TopLevelParam implements Serializable { public static final String TECH_CODE="techCode"; public static final String PARAMS="params"; public static final String PARAMS_PREFIX="params."; @Id private String techCode; @Field(type = FieldType.Nested,dynamic = Dynamic.TRUE) private Map<String,Object> params =new HashMap<>(); }
]]>现在业务侧要求尽量实现:
1 、针对原纪录的全模糊查询,即只要输入的字符串是某个姓名的子序列,就将其捞出来; 例如,对于输入的 "张 aた" 是要匹配到 "张三 abきたない",因为不涉及到原字符的转换,这里直接使用了 1gram+match_phrase_prefix
来实现了
2 、(目前遇到的问题) ,现在想要针对中简繁、日文、汉语等汉字系支持对应拼音、罗马音的模糊搜索, 例如,对于输入的 "张 san a ki t" 是要能够 匹配到 "张三 abきたない" 的; 即实际上要做到分词结果是 "张三 abきたない: 张 三 z h a n g s a n a b き た な い k i t a n a i" 的实现(当然这个我不是很确定是否是唯一解,只是认为如果能够达到这样的分词结果那就能满足我现在的搜索要求了)
我的问题是,如何实现这样的分词器呢?
icu_transform
等,貌似没法保留原字符串(或者这种场景下的自定义分词器该如何实现呢)先感谢 dalao 们回复
]]>目前想前台使用这种向量查询的结果 但是问题是目前单次查询的效率很低基本上得 60s 左右才能返回。
SaaS 项目,没有分库,ES 存储文章内容,并发不高没做分布式。ES 由前人设计,7.9 版本,一个索引存了所有数据,包括文章正文、标题、作者、摘要等等。正文采用 text 类型。整个索引用了 ik 分词并设置为 ik_max_word ,正文字段的搜索分词用 ik smart ,并设置了 fielddata 。
现在有租户提需求,希望通过关键词查询正文,并且要求结果里一定要出现完整的关键词。听上去很普通的需求?但是有问题啊啊,用 term 一直都会返回一些,不多,但完全没有搜索关键词的结果。
一开始以为是保留词的问题,所以把用户关心的几个关键词全加到保留词列表里( ik/config 下面,并配置好,重启,重建索引),但结果还是一样。也试过用 .keyword ,查询结果数量更少了。。
查了网上很多资料,看上去很简单的问题。有没有大佬给指个路?
感恩感恩。
]]>下载地址: https://github.com/Bronya0/ES-King , 支持 win 、mac 、linux 平台
多种配色可选,例如猛男粉:
后来想了一下这么做是不是复杂度有点太高了,现在 es 已经集成了大部分功能,自己开发服务的效果也不一定有保证,是不是直接用 es 自身来做就好了
想了解一下各位是怎么做的,es 集成的中文分词插件怎么样,以及需要重建索引怎么做比较好(这也是我想把分词外置的原因,可以提高一下重建速度)
]]>旧 elasticsearch 集群,几个节点都是全角色(主节点、数据节点),有数据。 现在新建了一个大集群,分开了节点角色,索引和数据为空。
能不能把旧集群的主节点功能禁用,只当数据节点,然后修改集群发现的配置,直接接到新集群里来。
这样问主要是不想折腾数据导入导出了。
]]>ELK 的一大缺点就是这东西最初是没有登录机制的,只要拿到了 url 地址,kibana 看板谁都可以访问一下。后来 ELK 自带了一套 xpack 进行登录认证,可是除了账户名密码登录这种最原始的方法,剩下的高级功能,比如 oauth, oidc, ldap ,统统都是收费的.....总不能给每个人都专门搞一个 kibana 账户名密码吧......
所以呢,这里有一个基于 casdoor 的 elk 鉴权解决方案,不要钱,开源的,还有人维护呢~。Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,而 casdoor/elk-auth-casdoor 这套解决方案,则是一个反向代理,他可以拦截所有未经登录的前往 elk 的 http 访问流量,并且引导未登录用户进行登录,而且这个反向代理对已登录用户是完全透明的。
仓库地址 https://github.com/casdoor/elk-auth-casdoor
QQ 群:645200447
如果您有更多相关的特殊需求可以加群,我们会有专人对接~ (可以联系 ComradeProgrammer )
Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,简单点说,就是 Casdoor 可以帮你解决 用户管理 的难题,你无需开发用户登录注册等与用户鉴权相关的一系列功能,只需几个步骤,简单配置,与你的主应用配合,便可完全托管你的用户模块,简单省心,功能强大。
仓库地址: https://github.com/casbin/casdoor
演示地址: https://door.casbin.com/
官网文档: https://casdoor.org/
QQ 群:645200447
Casdoor 还支持 ldap ,saml 等诸多功能.....
Casdoor 目前作为 Casbin 社区项目统一使用的鉴权平台,项目已开源,希望得到大家的一些建议和 Star~,我们会及时跟进反馈并改正问题哒
对客提供搜索功能,其中有一个过滤条件是过滤用户已转存数据。 现在问题是如果有 2000 个用户都对同一个数据进行了转存 那该怎么实现这个方案呢? 最开始我想的是在 ES 上加一个转存用户 ID 列表 但是如果 2000 个用户都正好在一个热点数据上 岂不是这个字段需要挂一个 2000 个元素的列表,好像不太好?
所以请教各位大佬 行业有什么标准方案吗 或者有推荐的思路
]]>[ { "doc_key": 'a', "startsAt": '2024 年 1 月 29 日', "status": 'a' }, { "doc_key": 'a', "startsAt": '2024 年 1 月 30 日', "status": 'b' } ]
对上面样例 需要返回 doc_key=a, status=b
的记录。
通过翻文档目前我实现的
{ "aggs": { "unique_doc": { "terms": { "field": "doc_key", // 每个 doc_key 有多条记录 } }, "aggs": { "latest": { "top_hits": { "size": 1, "sort": [ { "@timestamp": { "order": "desc" } } ] } }, "pagination": { "bucket_sort": { "size": 10, "from": 0 } } } } }
问题: 没有实现最后一步状态过滤。 理想是在 top_hits 中能有个 filter 过滤status
字段,然后结合bucket selector
过滤 hit count != 0 的桶。
请教各位大佬该怎么做?
elasticsearch-logger
插件向 es
写入日志,但是这个插件不支持按日期新建索引,只能是一个固定的值,比如 apisix_log
;同时这个插件也会写入一个别名叫 apisix
;我在网上搜索了很多资料,包括也问题 ChatGPT 4
,但是都没有解决我的问题,像这种情况如何做 ilm
]]>想问一下如何扛过搜索高峰,试过阿里云的 Elasticsearch Serverless 服务,但是有限制,每秒钟只能通过 60 个请求,多余的会被拒绝掉。有什么别的办法吗
]]>然后我看到了一个 copy_to 的功能, 就想着直接增加一个新的 field 到 index 数据库里面去,这样每次插入的时候,自动复制 _id 的值到 id 字段上,然后搜索的时候就直接用 id 对结果进行排序就好了。但是试了下不行,增加新 id 的句子如下:
PUT /my_index4 { "mappings": { "properties": { "_id": {"type": "keyword", "copy_to": "id"}, "name": {"type": "text", "copy_to": "total"}, "age": {"type": "integer"}, "type": {"type": "keyword"}, "id": {"type": "keyword", "store": true} } } }
直接报错了,说 _id 字段重复。这样的话,有什么解决办法吗?
]]>ES 写入非常慢(如上图所示),使用 k8s + nfs ,这块不是很熟悉,有偿求技术支持。
有意的老哥,可留下联系方式。
有效期:10/10 —— 10/11
]]>这样的语法是可以实现模糊搜索的,因为 content 是富文本内容。如果 content 的内容文本大小超过 ignore_above 的设定,那就不会被索引,也就是即使有关键词匹配到,文档也不会被搜索到 ,而 ignore_above 也是有大小限制,请问这种需求应该怎么处理 。感谢
]]>若有大佬知晓,还请不吝解释。
以下为官网原话:
]]>
- Values for milliseconds-since-the-epoch must be non-negative. Use a formatted date to represent dates before 1970.
- Internally, dates are converted to UTC (if the time-zone is specified) and stored as a long number representing milliseconds-since-the-epoch.
- Queries on dates are internally converted to range queries on this long representation, and the result of aggregations and stored fields is converted back to a string depending on the date format that is associated with the field.
- Dates will always be rendered as strings, even if they were initially supplied as a long in the JSON document.
索引就两个字段,id 和 content ,主要就是实现 content 的模糊搜索
现在单索引 4000 万数据,大小为 35G ,机器内存 16G
刚开始一千多万数据的时候第一次搜索 2-3 秒,后面搜索基本上 1-2 秒
两千多万的时候首次搜索 5-6 秒,后面搜索 2-3 秒
现在三千多万数据了,首次搜索达到了 10 秒,后续搜索 3 秒左右
这种情况怎么做预加载?看手册用 Eagerly load fielddata 和 Eagerly load global ordinals 都行不太通,内存分给 es 就 8G ,content 字段肯定就超过 30G 了,不可能丢到内存里面去。
还有什么办法?
]]> 我很 开胃<span style='background-color:greenyellow'>健脾</span>补元气 <span style='background-color:greenyellow'>我</span>很 开胃健脾补元气``` ```<span style='background-color:greenyellow'>我</span>很 <span style='background-color:greenyellow'>开胃</span><span style='background-color:greenyellow'>健脾</span>补元气``` 还是只能自己实现?
]]>好像找了几年都没找到。。
]]>ES 将数据写入到 Memory Buffer ,同时也会将数据写入到 Translog 。
Memory Buffer 在历经 Refresh Interval ( 1 秒) 之后会把数据写入到 File System Cache ,再由 File System Cache 写入到 Segment 。
而 数据写入到 Translog 之后,要经过 5 秒 才会持久化到磁盘 log 中。
我理解 Translog 本身应该是类似于 MySQL Binlog 一样是防止数据丢失的。
但是目前看来 5s 的时间是否过长了,我理解 5s 怎么也完成 数据 从 内存 持久化 到 Segment 了啊..
]]>图中数据源,源于 nginx 请求日志。需要对指定 url path 进行匹配,忽略 query 参数。比如需要通过 /helloworld/haveadrink 匹配以下 url:
请问该怎么写 query 语句?
]]>然后根据需求变更在该索引增加了字段,
但是 在 discover 这一项,一直查看不到新增的索引字段,
请问下,该如何操作,才能让该索引字段展示出来
]]>当我用 spring data elasticsearch 的 repository saveAll 操作去批量插入 100 条数据时,发现耗时在 200 ms 左右。其实我感觉这个速度跟正常用公有云的 rds 批量插入数据是差不多了。
那么问题来了,es 这个插入速度是正常的吗,是不是还有其他优化参数可以配置,用来提升这个插入性能?如果这样是正常的,那么 es 在插入和查询上相比于 rds ,在实际应用中,优势体现在哪些地方呢?
]]>