💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
- 导航
- 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
- 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
- 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
- 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
- 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
- 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
- 1.max_shards_per_node
- 2.python api
- 3.fuzziness
- 4.\_score
- 5.minimum_should_match
- 6.embedding_dim
1.max_shards_per_node
在 Elasticsearch 中,max_shards_per_node
是一个集群级别的设置,用于限制每个节点上可以打开的最大分片数。这个设置有助于防止单个节点上分片数量过多,从而可能导致性能问题或资源耗尽。默认情况下,Elasticsearch 集群的每个节点可以有 1000 个分片,但这个数字可以根据需要进行调整。
临时设置:
PUT /_cluster/settings
{
"transient": {
"cluster": {
"max_shards_per_node": 10000
}
}
}
永久设置:
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"max_shards_per_node": 10000
}
}
}
2.python api
# 指定参数分页查询
from elasticsearch import Elasticsearch
es = Elasticsearch()
query = {
"query": {
"match_all": {}
}
}
response = es.search(index="db01_v1_20240903", body=query, from_=0, size=10)
3.fuzziness
在 Elasticsearch 中,fuzziness
是一个用于模糊查询的参数,它允许在搜索时指定一个编辑距离,即允许用户输入与索引中的单词有一定差异的查询词,依然能够匹配到相应的文档。这个参数主要用于处理用户输入错误或拼写变体的情况。
fuzziness
可以设置为以下值:
- 数值:如
0
、1
、2
,表示允许的最大编辑操作次数。数值越大,匹配的结果可能会越多,但同时查询性能可能会下降。 - AUTO:这是一个特殊的设置,它会根据查询词的长度自动调整编辑距离。通常,对于长度小于等于 2 的词,编辑距离设置为 0;长度在 3 到 5 之间的词,编辑距离设置为 1;长度大于 5 的词,编辑距离设置为 2。这个设置可以通过
AUTO:[low],[high]
的格式进行自定义,其中low
和high
分别表示词长范围的下限和上限。
例如,如果你想要在搜索时允许一个编辑错误,可以这样设置:
{
"query": {
"match": {
"field": {
"query": "search_term",
"fuzziness": 1
}
}
}
}
或者使用 AUTO
:
{
"query": {
"match": {
"field": {
"query": "search_term",
"fuzziness": "AUTO"
}
}
}
}
需要注意的是,模糊查询虽然可以提高用户体验,但可能会对性能产生影响,因为它需要额外的处理来生成和匹配可能的变体词。因此,在性能敏感的应用中应谨慎使用。
4._score
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 2.137549,
"hits": [
{
"_index": "book",
"_type": "_doc",
"_id": "3",
"_score": 2.137549,
"_source": {
"name": "spring开发基础",
"description": "spring 在java领域非常流行,java程序员都在用。",
"studymodel": "201001",
"price": 88.6,
"timestamp": "2019-08-24 19:11:35",
"pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": ["spring", "java"]
}
},
{
"_index": "book",
"_type": "_doc",
"_id": "2",
"_score": 0.57961315,
"_source": {
"name": "java编程思想",
"description": "java语言是世界第一编程语言,在软件开发领域使用人数最多。",
"studymodel": "201001",
"price": 68.6,
"timestamp": "2019-08-25 19:11:35",
"pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": ["java", "dev"]
}
}
]
}
}
结果分析:
-
建立索引时, description 字段 term 倒排索引
-
java 2,3
-
程序员 3
-
-
搜索时,直接找 description 中含有 java 的文档 2,3,并且 3 号文档含有两个 java 字段,一个程序员,所以得分高,排在前面。2 号文档含有一个 java,排在后面。
5.minimum_should_match
minimum_should_match
是 Elasticsearch 中布尔查询(Boolean Query)的一个重要参数,它用来指定在执行查询时,should 子句至少应该匹配的子句数量或百分比。这个参数可以是具体的数字,也可以是百分比,或者它们的组合。
-
具体数字:如果
minimum_should_match
设置为一个整数,它表示至少需要匹配的 should 子句的数量。例如,如果有 4 个 should 子句,设置为 2 意味着文档必须至少满足其中的 2 个子句。 -
百分比:如果设置为百分比,它表示至少需要匹配的 should 子句的百分比。例如,如果有 6 个 should 子句,设置为 “50%” 意味着至少需要匹配 3 个子句(6 的 50%向下取整)。
-
组合使用:可以使用百分比和固定值的组合,如 “3<90%”,表示至少需要匹配 3 个子句或总数的 90%(以较大者为准)。
-
默认值:如果 bool 查询包含至少一个 should 子句,而没有 must 或 filter 子句,则
minimum_should_match
的默认值为 1。这意味着至少有一个 should 子句需要匹配。如果 bool 查询中包含 must 或 filter 子句,则minimum_should_match
的默认值为 0,意味着 should 子句可以不满足任何条件。 -
特殊语法:可以使用特殊的语法来更精确地控制匹配条件,例如 “2<-25% 9<-3”,这表示如果有 1 或 2 个子句,则都需要匹配;如果有 3-9 个子句,则需要匹配除了 25%之外的所有子句;如果有 9 个以上的子句,则需要匹配除了三个之外的所有子句。
这个参数的使用可以根据查询的具体需求来调整,以达到最佳的查询结果和性能平衡。正确使用 minimum_should_match
可以提高查询的准确性和召回率,使得搜索结果更加符合用户的预期。
6.embedding_dim
在 Elasticsearch 中,embedding_dim
是一个与向量搜索相关的参数,它指定了存储在dense_vector
字段中的向量的维度。这个参数在创建索引时定义,并用于指定向量字段的维度大小。当索引设置为 true 时,embedding_dim
的值不能超过 1024,当索引设置为 false 时,可以不超过 2048。这个值必须与后续写入的向量维度一致。
embedding_dim
参数直接影响搜索结果,因为它决定了文档向量在向量空间中的表示。在进行向量搜索时,Elasticsearch 会使用这个参数来计算查询向量与文档向量之间的相似度。例如,使用余弦相似度或欧几里得距离等度量标准来找到与查询向量最相似的文档向量。如果embedding_dim
设置不正确,可能会导致搜索结果的相关性降低,因为向量之间的比较可能不准确。
在实际应用中,embedding_dim
的选择取决于所使用的机器学习模型生成的向量维度。例如,如果使用 BERT 模型生成的向量是 768 维的,那么在 Elasticsearch 中创建索引时,embedding_dim
应该设置为 768,以确保文档向量可以正确存储和检索。
例如,如果你使用 BERT 模型、GloVe、Word2vec 或者 ChatGPT Embedding API 等将文本转换为向量,你需要在创建索引时指定dims
参数,其值应与生成的向量维度相匹配。这样,Elasticsearch 就可以正确地存储和索引这些向量,以便进行高效的相似度搜索。
在实际应用中,embedding_dim
参数的使用可以帮助实现语义搜索,通过比较查询向量和文档向量的相似度来检索文档,从而提供更加相关和准确的搜索结果。这种基于向量的搜索方法可以用于各种应用场景,如图像搜索、音乐推荐、文本分类等。
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙