mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 12:32:30 +08:00
Feat:add variables to the metadata filtering function of the knowledg… (#10967)
…e retrieval component. ### What problem does this PR solve? issue: #10861 change: add variables to the metadata filtering function of the knowledge retrieval component ### Type of change - [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
@ -13,6 +13,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
from functools import partial
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
@ -131,7 +133,35 @@ class Retrieval(ToolBase, ABC):
|
|||||||
if not doc_ids:
|
if not doc_ids:
|
||||||
doc_ids = None
|
doc_ids = None
|
||||||
elif self._param.meta_data_filter.get("method") == "manual":
|
elif self._param.meta_data_filter.get("method") == "manual":
|
||||||
doc_ids.extend(meta_filter(metas, self._param.meta_data_filter["manual"]))
|
filters=self._param.meta_data_filter["manual"]
|
||||||
|
for flt in filters:
|
||||||
|
pat = re.compile(r"\{* *\{([a-zA-Z:0-9]+@[A-Za-z:0-9_.-]+|sys\.[a-z_]+)\} *\}*")
|
||||||
|
s = flt["value"]
|
||||||
|
out_parts = []
|
||||||
|
last = 0
|
||||||
|
|
||||||
|
for m in pat.finditer(s):
|
||||||
|
out_parts.append(s[last:m.start()])
|
||||||
|
key = m.group(1)
|
||||||
|
v = self._canvas.get_variable_value(key)
|
||||||
|
if v is None:
|
||||||
|
rep = ""
|
||||||
|
elif isinstance(v, partial):
|
||||||
|
buf = []
|
||||||
|
for chunk in v():
|
||||||
|
buf.append(chunk)
|
||||||
|
rep = "".join(buf)
|
||||||
|
elif isinstance(v, str):
|
||||||
|
rep = v
|
||||||
|
else:
|
||||||
|
rep = json.dumps(v, ensure_ascii=False)
|
||||||
|
|
||||||
|
out_parts.append(rep)
|
||||||
|
last = m.end()
|
||||||
|
|
||||||
|
out_parts.append(s[last:])
|
||||||
|
flt["value"] = "".join(out_parts)
|
||||||
|
doc_ids.extend(meta_filter(metas, filters))
|
||||||
if not doc_ids:
|
if not doc_ids:
|
||||||
doc_ids = None
|
doc_ids = None
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user