Skip to content

Commit 52a3497

Browse files
author
Repumba
committed
Documentation for querying and automated tests
1 parent 06251c5 commit 52a3497

File tree

2 files changed

+114
-2
lines changed

2 files changed

+114
-2
lines changed

docs/user-guide/7-Lucene-search.rst

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,36 @@ Related file field (\ ``related.<field>:``\ )
555555
You can query objects by their related files. There are 4 ways to do it:
556556

557557
* ``related.name:`` - query by related file's name
558+
559+
.. code-block:: python
560+
561+
related.name:"name.txt"
562+
563+
564+
This field accepts wildcards.
565+
558566
* ``related.size:`` - query by related file's size
567+
568+
.. code-block:: python
569+
570+
related.size:"<5kb"
571+
572+
559573
* ``related.sha256:`` - query by related file's sha256
560-
* ``related.count:`` - query by number of files related to the object
574+
575+
.. code-block:: python
576+
related.sha256:"2ed91d820157c0530ffbae54122d998e0de6d958f266b682f7c528942f770470"
577+
578+
579+
* ``related.count:`` - query by number of files related to the object
580+
581+
.. code-block:: python
582+
583+
# get files, which have at least 0 related files and no more than 2
584+
related.count:[0 TO 2]
585+
# get files, which have at least 2 related files
586+
related.count:">=2"
587+
# get files, which have more than 2 related files
588+
related.count:">2"
589+
# get files, which have exactly 1 related file
590+
related.count:"1"

tests/backend/test_search.py

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import datetime
33

44
from .relations import *
5-
from .utils import base62uuid
5+
from .utils import base62uuid, calc_sha256
66
from .utils import ShouldRaise
77
from .utils import rand_string
88
import random
@@ -668,3 +668,85 @@ def test_search_multi(admin_session):
668668
wildcard_hash = samples[0].get("sha512")[:-100] + "*"
669669
with ShouldRaise(status_code=400):
670670
found_objs = test.search(f'file.multi:"{wildcard_hash}"')
671+
672+
673+
def test_related_files_search(admin_session):
674+
test = admin_session
675+
676+
filename = base62uuid()
677+
678+
# File A
679+
file_content = base62uuid()
680+
FileA = test.add_sample(filename, file_content)
681+
682+
test.add_related_file(FileA["sha256"], "related.txt", "b"*1024)
683+
test.add_related_file(FileA["sha256"], "related.mp3")
684+
test.add_related_file(FileA["sha256"], "related.png")
685+
686+
# File 2
687+
file_content = base62uuid()
688+
FileB = test.add_sample(filename, file_content)
689+
690+
test.add_related_file(FileB["sha256"], "related.txt", "b"*2048)
691+
test.add_related_file(FileB["sha256"], "related.mp3")
692+
test.add_related_file(FileB["sha256"], "related.jpg")
693+
test.add_related_file(FileB["sha256"], "related.csv")
694+
695+
# Related file name
696+
results = [
697+
result["id"] for result in
698+
test.search(f'related.name:"*.png" AND file.name:"{filename}"')
699+
]
700+
assert sorted(results) == sorted([FileA["sha256"]])
701+
results = [
702+
result["id"] for result in
703+
test.search(f'related.name:"related.mp3" AND file.name:"{filename}"')
704+
]
705+
assert sorted(results) == sorted([FileA["sha256"], FileB["sha256"]])
706+
707+
# Related file size
708+
results = [
709+
result["id"] for result in
710+
test.search(f'related.size:">2000" AND file.name:"{filename}"')
711+
]
712+
assert sorted(results) == sorted([FileB["sha256"]])
713+
results = [
714+
result["id"] for result in
715+
test.search(f'related.size:"<=2048" AND file.name:"{filename}"')
716+
]
717+
assert sorted(results) == sorted([FileA["sha256"], FileB["sha256"]])
718+
results = [
719+
result["id"] for result in
720+
test.search(f'related.size:[1000 TO 1100] AND file.name:"{filename}"')
721+
]
722+
assert sorted(results) == sorted([FileA["sha256"]])
723+
724+
# Related file sha256
725+
sha256 = calc_sha256("b"*1024)
726+
results = [
727+
result["id"] for result in
728+
test.search(f'related.sha256:"{sha256}" AND file.name:"{filename}"')
729+
]
730+
assert sorted(results) == sorted([FileA["sha256"]])
731+
732+
# Related file count
733+
results = [
734+
result["id"] for result in
735+
test.search(f'related.count:"3" AND file.name:"{filename}"')
736+
]
737+
assert sorted(results) == sorted([FileA["sha256"]])
738+
results = [
739+
result["id"] for result in
740+
test.search(f'related.count:">3" AND file.name:"{filename}"')
741+
]
742+
assert sorted(results) == sorted([FileB["sha256"]])
743+
results = [
744+
result["id"] for result in
745+
test.search(f'related.count:"<=4" AND file.name:"{filename}"')
746+
]
747+
assert sorted(results) == sorted([FileA["sha256"], FileB["sha256"]])
748+
results = [
749+
result["id"] for result in
750+
test.search(f'related.count:[1 TO 3] AND file.name:"{filename}"')
751+
]
752+
assert sorted(results) == sorted([FileA["sha256"]])

0 commit comments

Comments
 (0)