search_index() {
- local -r index_version=4
+ local -r index_version=5
local -r index_version_file=${DATA_DIR}/.index_version
if [[ (! -f "${index_version_file}") || $(<"${index_version_file}") != "$index_version" ]]; then
path_id=NUMERIC(),
has_path=BOOLEAN(),
notes=TEXT(),
+ num_notes=NUMERIC(sortable=True, signed=False),
owner=TEXT(),
owner_id=NUMERIC(),
has_owner=BOOLEAN(),
path_id=doc.storage_path.id if doc.storage_path else None,
has_path=doc.storage_path is not None,
notes=notes,
+ num_notes=len(notes),
owner=doc.owner.username if doc.owner else None,
owner_id=doc.owner.id if doc.owner else None,
has_owner=doc.owner is not None,
"correspondent__name": "correspondent",
"document_type__name": "type",
"archive_serial_number": "asn",
+ "num_notes": "num_notes",
}
if field.startswith("-"):
self.assertEqual(r.data["count"], 4)
def test_search_sorting(self):
+ u1 = User.objects.create_user("user1")
+ u2 = User.objects.create_user("user2")
c1 = Correspondent.objects.create(name="corres Ax")
c2 = Correspondent.objects.create(name="corres Cx")
c3 = Correspondent.objects.create(name="corres Bx")
content="test",
archive_serial_number=2,
title="3",
+ owner=u1,
)
d2 = Document.objects.create(
checksum="2",
content="test",
archive_serial_number=3,
title="2",
+ owner=u2,
)
d3 = Document.objects.create(
checksum="3",
archive_serial_number=1,
title="1",
)
+ Note.objects.create(
+ note="This is a note.",
+ document=d1,
+ user=u1,
+ )
+ Note.objects.create(
+ note="This is a note.",
+ document=d1,
+ user=u1,
+ )
+ Note.objects.create(
+ note="This is a note.",
+ document=d3,
+ user=u1,
+ )
with AsyncWriter(index.open_index()) as writer:
for doc in Document.objects.all():
search_query("&ordering=-correspondent__name"),
[d2.id, d3.id, d1.id],
)
+ self.assertListEqual(
+ search_query("&ordering=num_notes"),
+ [d2.id, d3.id, d1.id],
+ )
+ self.assertListEqual(
+ search_query("&ordering=-num_notes"),
+ [d1.id, d3.id, d2.id],
+ )
def test_statistics(self):
doc1 = Document.objects.create(