当前位置:   article > 正文

Langchain 使用 Elasticsearch,对 Metadata 同一字段的多个属性值进行筛选_elasticsearch langchain

elasticsearch langchain

背景

使用Langchain + Elasticsearch 做向量知识库检索时,可能会需要根据 metadata 做数据筛选。

(本文主要演示对一个字段的多个属性值进行精确或模糊筛选。)

假设 metadata 数据格式如下:

1"metadata":{"source":"...","author":"zhangsan","date":"2008-03-08"}
2"metadata":{"source":"...","author":"lisi","date":"2009-09-09"}
3"metadata":{"source":"...","author":"liwu","date":"2001-04-05"}
...
  • 1
  • 2
  • 3
  • 4

一般的检索代码如下:

from langchain.vectorstores.elasticsearch import ElasticsearchStore
db = ElasticsearchStore(...)
...
returns = db.similarity_search("检索的问题", k=4)
  • 1
  • 2
  • 3
  • 4

如果需要根据 metadata 筛选符合条件的数据,则需要增加 filter 参数:

filter_parms = ...
returns = db.similarity_search("检索的问题", k=4, filter=filter_parms)
  • 1
  • 2

1、精确筛选

1、精确匹配一个字段的个值:
[{'term': {'metadata.<字段名>.keyword': <字段值>}}]

举例:只筛选出 author"zhangsan" 的数据:

filter_parms = [{'term': {'metadata.author.keyword': "zhangsan"}}]
  • 1

2、精确匹配一个字段的个值:
[{'terms': {'metadata.<字段名>.keyword': <多个字段值列表>}}]

举例:筛选出 author"zhangsan" 或者 "lisi" 的数据:

filter_parms = [{'terms': {'metadata.author.keyword': ["zhangsan", "lisi"]}}]
  • 1

2、模糊筛选

1、模糊匹配一个字段的个值:
[{"bool": {"should": {"match": {"metadata.<字段名>": <字段值>}}}]

举例:只筛选出 author 包含 "li" 的数据(会匹配到 lisiliwu):

filter_parms = [{"bool": {"should": {"match": {"metadata.author": "li"}}}]
  • 1

2、模糊匹配一个字段的个值:
[{"bool": {"should": {"match": {"metadata.<字段名>": <字段值1>}}, {"match": {"metadata.<字段名>": <字段值2>}...}}]

举例:筛选出 author 包含 "li" 或者 "zhang" 的数据(会匹配到 zhangsanlisiliwu):

filter_parms = [{"bool": {
	"should": {
		"match": {"metadata.author": "li"},
		"match": {"metadata.author": "zhang"},
	}
}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

更多筛选方法可以参考Langchain文档:https://python.langchain.com/docs/integrations/vectorstores/elasticsearch

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/1004680
推荐阅读
相关标签
  

闽ICP备14008679号