Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

ID collision: a node with no source_file beats a sourced node with the same id (dedup._collision_rank)

Đã đóng Phù hợp với người mới
#4,492 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

  • #4496 của @ayushcodes10 — đã đóng, không merge

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
70/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
tooling

Hướng nghiên cứu

Cách xếp hạng xung đột nằm ở _collision_rank trong graphify/dedup.py, và deduplicate_entities gọi hàm này. Hãy bắt đầu bằng cách chạy lại bước tái hiện trong issue với sourced và blank theo cả hai thứ tự đến, sau đó so sánh với cách _pick_winner đã ưu tiên một source_file thật. Công việc hoàn thành khi nút có nguồn vẫn tồn tại ở cả hai thứ tự và hai nút có nguồn cùng id vẫn được giải quyết như trước. PR liên kết #4496 đã bị đóng mà không được merge, vì vậy hãy xem thảo luận của PR đó trước.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Version: graphifyy 0.9.91 (unchanged since at least 0.9.49)

When two nodes share an id that neither node's file encodes, so that _defines_id is False for both, _collision_rank ties them on every key but the reversed path. An empty source_file gives (), which sorts before any real path. So the source-less node always survives, and the sourced one is dropped:

from graphify.dedup import deduplicate_entities, _collision_rank
sourced = {"id": "x", "label": "X", "source_file": "a.md"}
blank = {"id": "x", "label": "X"}
print(_collision_rank(sourced))   # (True, 1, 1, 'X', ('a.md',))
print(_collision_rank(blank))     # (True, 1, 1, 'X', ())
nodes, _ = deduplicate_entities([sourced, blank], [], communities={})
print(nodes)                      # [{'id': 'x', 'label': 'X'}]

It is the same in either arrival order, and graphify warns "keeping 'X' from '', dropping 'X' from 'a.md'". Source-less semantic nodes reach dedup because the out-of-scope filter (#1895) returns early on an empty source_file, and since such a node is never in the per-file semantic cache, every incremental merge carries it forward.

#3775/#3786 made "a real source_file beats none" the rule in _pick_winner. The exact-ID path does not have it (its reversed-path tie-break dates from #2532's fix in 0.9.36). A key such as not node.get("source_file") right after not _defines_id(node) would match. It changes no collision between two sourced nodes.

Ngôn ngữ chính
Python
Star
124k
Fork
11.9k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Graphify-Labs/graphify

Tất cả issue của Graphify-Labs/graphify

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.