-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathelastic_indexers_test.py
More file actions
111 lines (98 loc) · 3.49 KB
/
Copy pathelastic_indexers_test.py
File metadata and controls
111 lines (98 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# Copyright 2019 The Forte Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Unit tests for elastic indexer module.
"""
import time
import unittest
from ddt import ddt, data, unpack
from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk
from forte.elastic import ElasticSearchIndexer
from helpers.test_utils import performance_test
@ddt
class TestElasticSearchIndexer(unittest.TestCase):
r"""Tests Elastic Indexer."""
def setUp(self):
self.indexer = ElasticSearchIndexer(config={"index_name": "test_index"})
def tearDown(self):
self.indexer.elasticsearch.indices.delete(
index=self.indexer.hparams.index_name, ignore=[400, 404]
)
def test_add(self):
document = {
"key": "This document is created to test " "ElasticSearchIndexer"
}
self.indexer.add(document, refresh="wait_for")
retrieved_document = self.indexer.search(
query={
"query": {"match": {"key": "ElasticSearchIndexer"}},
"_source": ["key"],
}
)
hits = retrieved_document["hits"]["hits"]
self.assertEqual(len(hits), 1)
self.assertEqual(hits[0]["_source"], document)
def test_add_bulk(self):
size = 10000
documents = set(
[
f"This document {i} is created to test " f"ElasticSearchIndexer"
for i in range(size)
]
)
self.indexer.add_bulk(
[{"key": document} for document in documents], refresh="wait_for"
)
retrieved_document = self.indexer.search(
query={"query": {"match_all": {}}},
index_name="test_index",
size=size,
)
hits = retrieved_document["hits"]["hits"]
self.assertEqual(len(hits), size)
results = set([hit["_source"]["key"] for hit in hits])
self.assertEqual(results, documents)
@performance_test
@data([100, 0.3], [500, 0.3], [1000, 0.3])
@unpack
def test_speed(self, size, epsilon):
es = Elasticsearch()
documents = [
{
"_index": "test_index_",
"_type": "document",
"key": f"This document {i} is created to test "
f"ElasticSearchIndexer",
}
for i in range(size)
]
start = time.time()
bulk(es, documents, refresh=False)
baseline = time.time() - start
es.indices.delete(index="test_index_", ignore=[400, 404])
documents = set(
[
f"This document {i} is created to test " f"ElasticSearchIndexer"
for i in range(size)
]
)
start = time.time()
self.indexer.add_bulk(
[{"key": document} for document in documents], refresh=False
)
forte_time = time.time() - start
self.assertLessEqual(forte_time, baseline + epsilon)
if __name__ == "__main__":
unittest.main()