Skip to content

Commit

Permalink
Merge pull request freelawproject#3900 from freelawproject/3897-fix-r…
Browse files Browse the repository at this point in the history
…otuing-id-indexing-child-documents

3897 Fix routing ID when indexing child documents in bulk.
  • Loading branch information
mlissner authored Mar 18, 2024
2 parents 720aacd + 089f698 commit d86f40e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
15 changes: 11 additions & 4 deletions cl/search/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -864,6 +864,8 @@ def bulk_indexing_generator(
:param child_id_property: Optional, the property to be used for generating
ES child document ID.
:param parent_id: Optional, the parent instance ID used for routing in ES.
This parameter must only be provided when indexing documents that belong to
the same parent document.
:param base_doc: The base ES document fields.
:return: Yields ES child documents for bulk indexing.
"""
Expand All @@ -876,13 +878,18 @@ def bulk_indexing_generator(
es_doc = es_document().prepare(doc)
if child_id_property:
if not parent_id:
parent_id_lambda = parent_id_mappings.get(child_id_property)
if not parent_id_lambda:
routing_id_lambda = parent_id_mappings.get(child_id_property)
if not routing_id_lambda:
continue
parent_id = parent_id_lambda(doc)
# Get the routing_id from the parent document's ID.
routing_id = routing_id_lambda(doc)
else:
# The parent_id was provided when indexing documents that
# belong to the same parent.
routing_id = parent_id
doc_params = {
"_id": getattr(ES_CHILD_ID(doc.pk), child_id_property),
"_routing": f"{parent_id}",
"_routing": f"{routing_id}",
}
else:
doc_params = {
Expand Down
21 changes: 21 additions & 0 deletions cl/search/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2146,12 +2146,20 @@ def test_sweep_indexer_all(self):
self.assertEqual(
s.count(), 2, msg="Wrong number of RECAPDocuments returned."
)
# Confirm routing_ids are properly set.
response = s.execute()
self.assertEqual(int(response[0].meta.routing), self.de.docket.pk)
self.assertEqual(int(response[1].meta.routing), self.de.docket.pk)

# Confirm RECAPDocuments are indexed.
s = DocketDocument.search()
s = s.query("parent_id", type="recap_document", id=self.de_1.docket.pk)
self.assertEqual(
s.count(), 1, msg="Wrong number of RECAPDocuments returned."
)
# Confirm routing_ids are properly set.
response = s.execute()
self.assertEqual(int(response[0].meta.routing), self.de_1.docket.pk)

# Confirm Audios are indexed.
s = AudioDocument.search().query("match_all")
Expand Down Expand Up @@ -2184,12 +2192,25 @@ def test_sweep_indexer_all(self):
self.assertEqual(
s.count(), 2, msg="Wrong number of Opinions returned."
)
# Confirm routing_ids are properly set.
response = s.execute()
self.assertEqual(
int(response[0].meta.routing), self.opinion_cluster_1.pk
)
self.assertEqual(
int(response[1].meta.routing), self.opinion_cluster_1.pk
)

s = OpinionClusterDocument.search()
s = s.query("parent_id", type="opinion", id=self.opinion_cluster_2.pk)
self.assertEqual(
s.count(), 1, msg="Wrong number of Opinions returned."
)
# Confirm routing_ids are properly set.
response = s.execute()
self.assertEqual(
int(response[0].meta.routing), self.opinion_cluster_2.pk
)

@override_settings(ELASTICSEARCH_SWEEP_INDEXER_ACTION="missing")
def test_sweep_indexer_missing(self):
Expand Down

0 comments on commit d86f40e

Please sign in to comment.