Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/2046 1833 improved repository search #2136

Conversation

ghost
Copy link

@ghost ghost commented Dec 3, 2019

Large search improvement/documentation/test/refactory.

Contents in at bird sight:

  1. Separation of input parsing logic vs dedicated logic for each search service
  2. Simple search service logic completely re-written
  3. 135 search tests (most of which new) in repository-core. Including mixed integration and pure unit tests (the latter on the common parsing mechanism)
  4. Documentation and plenty of javadoc
  5. REST endpoint for sys admins to force re-create the index (rather than just reindex the model) - in addition to previous endpoint and with additional entry in UI form
  6. Search is much leninent to user input, supports multiple tags and wildcards, etc. see docs

Not included:
a. Integration tests for Elasticsearch - those are in the works, but will be added in a different branch

…ocker (image/IDE setup not included)

This provides two distinct dev features:

1. A profile that allows persisting the model locally across repository restarts, and simplifies some of the runtime parameters (you only need to provide the github-related personal credentials in the runtime configuration)

2. References to this profile in the ElasticSearchConfiguration, so that is used instead of the "SimpleSearch" when running locally. It is implied that an ElasticSearch instance will run locally on the default ports as single-node (i.e. with Docker).

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
… logs (ugly but better than current) / added todo on other ugly code

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
minimal javadoc even if private / some auto-sorting of imports

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1) Delegation of parsing / parameter POJO to external classes for reusal
2) Parsing supports case-insensitive tags and terms
3) All values (but not the tag names) can contain wildcards
4) Only untagged type now supported is name (previously infomodel was supported as well)

Not yet supported:

1) Namespace/version search are only supported at service level, but not in indices (so they won't work yet as is)
2) No changes yet in "simple" search

Not done yet:

1) Tests
2) More tests
3) And more tests even

Global / trivial changes:

1) ModelState enum element names changed to conform with other enums, and allow backwards-resolution of exact type name when searching with no wildcards (this impacts many other classes nominally)
2) Copyrights

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. Delegation of parsing / parameter POJO to external classes for reusal
2. Parsing supports case-insensitive tags and terms
3. All values (but not the tag names) can contain wildcards
4. Only untagged type now supported is name (previously infomodel was supported as well)
5. **new** Namespace/version search now supported (models need to be re-indexed for this to work)

Not yet supported:

1. No changes yet in "simple" search

Not done yet:

1) Tests
2) More tests
3) And more tests even

Global / trivial changes:

1) ModelState enum element names changed to conform with other enums, and allow backwards-resolution of exact type name when searching with no wildcards (this impacts many other classes nominally)
2) Copyrights

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
… from development branch.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. Removed useless "expandWildcardsOpen" getter invocation in ElasticSearch (might need to verify whether actually setting the value in settings is necessary)
2. Adjusted search controller to prevent prepending name tag to name-tagged content (which results in name:name:[some name expression] queries)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. Improved and moved enum-type normalization to SearchTags enum (from ElasticSearch implementation) for clarity/elegance
2. Updated javadocs to reflect 1. and the fact that enums are indexed as keyword (hence, the normalization that capitalizes the enum's first letter when possible)
3. Minimal logging in SearchTags

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. Trivial:
  * fixed typo constant name in ElasticSearchService
  * fixed some imports in various classes
2. Small: added persisting local repository profile for testing the simple search, and reference in RepositoryConfiguration
3. Big: refactored simple search to conform with ElasticSearch improvements, namely with multi-tag search, lowercase search, multi-wildcard search and removing non-tagged parsing of anything but name.
  Impact:
  * ModelRepository (nominal fix)
  * SearchParameters (added utilities)
  * ModelSearchUtil (full rewrite / removed parsing from scope, leaving only service-scoped logic)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. Made createQueryFromExpression static
2. Removed useless additional space between WHERE and first constraint when building the query
3. Appended wildcard to the end of names if any in given parameters (and if any applicable), to harmonize with ElasticSearch query and for backwards compatibility (the Angular controller used to do that - moved to the back-end)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
This initial change set includes:

1. Tests for each tag + freetext search for model name
2. Moved the previous tests to the new search package, and modifying a few in cases where the functionality changed
3. Added one test resource
4. Added one intermediary test class for some boilerplate functionality and constants

Issues:

* Importing models is proving quite time-expensive, and the cost is very salient now that many search tests are added
* Due to the architecture in the parent class AbstractIntegrationTest, importing models currently has to take place before each test
* As such it would be much better to find a way to import the model statically on @BeforeClass once per test class
* However, that may imply some refactory or re-writing

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. New SearchTestInfrastructure class to be used statically by search test classes
2. Some additional javadoc
3. Separating original search test into 2 classes by model
4. Refactoring logic in new search classes to leverage the static mechanism

Performance gain is huge - now 124 tests run in < 1s total (vs. several minutes previously).

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. Added / cleaned up some mixed tests
2. Made SearchTestInfrastructure class final

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
1. Fixed internal invocations of search with untagged type failing in tests (and would fail at least in one occurrence in real life)
2. Extraneous/trivial: fixed javadoc in search service interface

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
…full case-insensitivity in non-wildcarded searches.

Also amended some javadoc.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
…rchability for formerly non-text fields such as enumerated types, etc.

Added controller and interface definition/ES implementation for force-reindexing all fields according to (assuming changed) mapping.
This only works with Elastic Search, just as the other reindex functionality.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
* Created ElasticSearch's Readme.md
* Linked to the future public version of the latter in the vorto_repository-1.0.yml resource describing the search API

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
* Better handling of unparsed values in SearchTags, to avoid overloading a search with unwanted garbage in case tag is to be treated as case-insensitive
* Better naming of tags in Readme.md

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
* Un-tagged names resolve as before (displayName, description, searchableName)
* Tagged names only resolve as displayName (which always seems to equal ModelId#getName)
* This only seems to function properly with the Elasticsearch index, and is therefore not supported with the simple search, where both tagged and un-tagged searches will all resolve to [vorto:name], which seems broad enough in hindsight

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
…ndex)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
…less colloquial)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
* Unit tests for common search functionality (i.e. regardless of service logic)

Fixes

* Tag appending to tagged and un-tagged names containing no wildcards moved from service logic and added automatically to common search logic behind the scenes (the simple search still does convert the wildcards to SQL-friendly, as it should)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
@aedelmann
Copy link
Contributor

@mena-bosch

  1. You build fails due to a broken link to Vorto Web Site. U might wanna try https://www.eclipse.org/vorto

@ghost
Copy link
Author

ghost commented Dec 4, 2019

@mena-bosch

1. You build fails due to a broken link to Vorto Web Site. U might wanna try https://www.eclipse.org/vorto

Hey @aedelmann , thanks for your help!
In hindsight I think this is not related to the protocol and more to the fact that, unbeknownst to me, my IDE decided it would be useful to wrap the copy-pasted link to Vorto home in double parentheses...
Trying again with both https and parenthesis fixed momentarily.

… https instead of plain http

2. Better description of forcing re-create index from UI perspective in doc

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
@aedelmann
Copy link
Contributor

Hi @mena-bosch
I created another issue for the Released REST Endpoint Bug: #2137

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
@ghost
Copy link
Author

ghost commented Dec 4, 2019

Sigh.
Looks like latest merge of #2135 today made my test class' usage of org.eclipse.vorto.repository.domain.User unsupported.
Merging again from dev, fixing problematic invocations and pushing again shortly.

@aedelmann aedelmann merged commit 74060c9 into eclipse:development Dec 4, 2019
@aedelmann aedelmann deleted the feature/2046_1833_improved_repository_search branch December 4, 2019 13:50
kolotu pushed a commit to bosch-io/vorto that referenced this pull request Dec 10, 2019
* Local dev setup persisting model locally, and using ElasticSearh on docker (image/IDE setup not included)

This provides two distinct dev features:

1. A profile that allows persisting the model locally across repository restarts, and simplifies some of the runtime parameters (you only need to provide the github-related personal credentials in the runtime configuration)

2. References to this profile in the ElasticSearchConfiguration, so that is used instead of the "SimpleSearch" when running locally. It is implied that an ElasticSearch instance will run locally on the default ports as single-node (i.e. with Docker).

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Javadoc on current search implementation.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Partial commit - cosmetics/performance: fixed string concatenation in logs (ugly but better than current) / added todo on other ugly code

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Partial commit - cosmetics: better name for name query method and some
minimal javadoc even if private / some auto-sorting of imports

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* ElasticSearch service refactory:

1) Delegation of parsing / parameter POJO to external classes for reusal
2) Parsing supports case-insensitive tags and terms
3) All values (but not the tag names) can contain wildcards
4) Only untagged type now supported is name (previously infomodel was supported as well)

Not yet supported:

1) Namespace/version search are only supported at service level, but not in indices (so they won't work yet as is)
2) No changes yet in "simple" search

Not done yet:

1) Tests
2) More tests
3) And more tests even

Global / trivial changes:

1) ModelState enum element names changed to conform with other enums, and allow backwards-resolution of exact type name when searching with no wildcards (this impacts many other classes nominally)
2) Copyrights

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* ElasticSearch service refactory:

1. Delegation of parsing / parameter POJO to external classes for reusal
2. Parsing supports case-insensitive tags and terms
3. All values (but not the tag names) can contain wildcards
4. Only untagged type now supported is name (previously infomodel was supported as well)
5. **new** Namespace/version search now supported (models need to be re-indexed for this to work)

Not yet supported:

1. No changes yet in "simple" search

Not done yet:

1) Tests
2) More tests
3) And more tests even

Global / trivial changes:

1) ModelState enum element names changed to conform with other enums, and allow backwards-resolution of exact type name when searching with no wildcards (this impacts many other classes nominally)
2) Copyrights

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Removed duplicate repository pom dependency declaration after merging from development branch.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Bugfix:

1. Removed useless "expandWildcardsOpen" getter invocation in ElasticSearch (might need to verify whether actually setting the value in settings is necessary)
2. Adjusted search controller to prevent prepending name tag to name-tagged content (which results in name:name:[some name expression] queries)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Improvement:

1. Improved and moved enum-type normalization to SearchTags enum (from ElasticSearch implementation) for clarity/elegance
2. Updated javadocs to reflect 1. and the fact that enums are indexed as keyword (hence, the normalization that capitalizes the enum's first letter when possible)
3. Minimal logging in SearchTags

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Multiple scopes in commit:

1. Trivial:
  * fixed typo constant name in ElasticSearchService
  * fixed some imports in various classes
2. Small: added persisting local repository profile for testing the simple search, and reference in RepositoryConfiguration
3. Big: refactored simple search to conform with ElasticSearch improvements, namely with multi-tag search, lowercase search, multi-wildcard search and removing non-tagged parsing of anything but name.
  Impact:
  * ModelRepository (nominal fix)
  * SearchParameters (added utilities)
  * ModelSearchUtil (full rewrite / removed parsing from scope, leaving only service-scoped logic)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Small fixes in SimpleSearch business logic:

1. Made createQueryFromExpression static
2. Removed useless additional space between WHERE and first constraint when building the query
3. Appended wildcard to the end of names if any in given parameters (and if any applicable), to harmonize with ElasticSearch query and for backwards compatibility (the Angular controller used to do that - moved to the back-end)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Simple search tests

This initial change set includes:

1. Tests for each tag + freetext search for model name
2. Moved the previous tests to the new search package, and modifying a few in cases where the functionality changed
3. Added one test resource
4. Added one intermediary test class for some boilerplate functionality and constants

Issues:

* Importing models is proving quite time-expensive, and the cost is very salient now that many search tests are added
* Due to the architecture in the parent class AbstractIntegrationTest, importing models currently has to take place before each test
* As such it would be much better to find a way to import the model statically on @BeforeClass once per test class
* However, that may imply some refactory or re-writing

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Search tests: big refactory for performance.

1. New SearchTestInfrastructure class to be used statically by search test classes
2. Some additional javadoc
3. Separating original search test into 2 classes by model
4. Refactoring logic in new search classes to leverage the static mechanism

Performance gain is huge - now 124 tests run in < 1s total (vs. several minutes previously).

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Search tests:

1. Added / cleaned up some mixed tests
2. Made SearchTestInfrastructure class final

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Search bugfix:

1. Fixed internal invocations of search with untagged type failing in tests (and would fail at least in one occurrence in real life)
2. Extraneous/trivial: fixed javadoc in search service interface

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Small fixes in ElasticSearch service: removed term queries to ensure full case-insensitivity in non-wildcarded searches.
Also amended some javadoc.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Changed ElasticSearch index to reflect wildcard, case-insensitive searchability for formerly non-text fields such as enumerated types, etc.
Added controller and interface definition/ES implementation for force-reindexing all fields according to (assuming changed) mapping.
This only works with Elastic Search, just as the other reindex functionality.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Documentation

* Created ElasticSearch's Readme.md
* Linked to the future public version of the latter in the vorto_repository-1.0.yml resource describing the search API

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Small glitches fix

* Better handling of unparsed values in SearchTags, to avoid overloading a search with unwanted garbage in case tag is to be treated as case-insensitive
* Better naming of tags in Readme.md

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Fine-tune on "name" search resolution:

* Un-tagged names resolve as before (displayName, description, searchableName)
* Tagged names only resolve as displayName (which always seems to equal ModelId#getName)
* This only seems to function properly with the Elasticsearch index, and is therefore not supported with the simple search, where both tagged and un-tagged searches will all resolve to [vorto:name], which seems broad enough in hindsight

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Admin function: re-created index (added instead of just replacing reindex)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Cosmetics: changed "under the hood" to "behind the scenes" (slightly less colloquial)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Tests

* Unit tests for common search functionality (i.e. regardless of service logic)

Fixes

* Tag appending to tagged and un-tagged names containing no wildcards moved from service logic and added automatically to common search logic behind the scenes (the simple search still does convert the wildcards to SQL-friendly, as it should)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Added a couple more search unit tests

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* 1. Build fix: fixed double-parenthesis in link to Vorto home and used https instead of plain http
2. Better description of forcing re-create index from UI perspective in doc

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Last-minute: forgot to fix one of the two URLs in docs

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Another last-minute fix to accommodate signature changes in eclipse#2135

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
JulianFeinauer pushed a commit to JulianFeinauer/vorto that referenced this pull request Jun 27, 2020
* Local dev setup persisting model locally, and using ElasticSearh on docker (image/IDE setup not included)

This provides two distinct dev features:

1. A profile that allows persisting the model locally across repository restarts, and simplifies some of the runtime parameters (you only need to provide the github-related personal credentials in the runtime configuration)

2. References to this profile in the ElasticSearchConfiguration, so that is used instead of the "SimpleSearch" when running locally. It is implied that an ElasticSearch instance will run locally on the default ports as single-node (i.e. with Docker).

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Javadoc on current search implementation.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Partial commit - cosmetics/performance: fixed string concatenation in logs (ugly but better than current) / added todo on other ugly code

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Partial commit - cosmetics: better name for name query method and some
minimal javadoc even if private / some auto-sorting of imports

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* ElasticSearch service refactory:

1) Delegation of parsing / parameter POJO to external classes for reusal
2) Parsing supports case-insensitive tags and terms
3) All values (but not the tag names) can contain wildcards
4) Only untagged type now supported is name (previously infomodel was supported as well)

Not yet supported:

1) Namespace/version search are only supported at service level, but not in indices (so they won't work yet as is)
2) No changes yet in "simple" search

Not done yet:

1) Tests
2) More tests
3) And more tests even

Global / trivial changes:

1) ModelState enum element names changed to conform with other enums, and allow backwards-resolution of exact type name when searching with no wildcards (this impacts many other classes nominally)
2) Copyrights

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* ElasticSearch service refactory:

1. Delegation of parsing / parameter POJO to external classes for reusal
2. Parsing supports case-insensitive tags and terms
3. All values (but not the tag names) can contain wildcards
4. Only untagged type now supported is name (previously infomodel was supported as well)
5. **new** Namespace/version search now supported (models need to be re-indexed for this to work)

Not yet supported:

1. No changes yet in "simple" search

Not done yet:

1) Tests
2) More tests
3) And more tests even

Global / trivial changes:

1) ModelState enum element names changed to conform with other enums, and allow backwards-resolution of exact type name when searching with no wildcards (this impacts many other classes nominally)
2) Copyrights

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Removed duplicate repository pom dependency declaration after merging from development branch.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Bugfix:

1. Removed useless "expandWildcardsOpen" getter invocation in ElasticSearch (might need to verify whether actually setting the value in settings is necessary)
2. Adjusted search controller to prevent prepending name tag to name-tagged content (which results in name:name:[some name expression] queries)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Improvement:

1. Improved and moved enum-type normalization to SearchTags enum (from ElasticSearch implementation) for clarity/elegance
2. Updated javadocs to reflect 1. and the fact that enums are indexed as keyword (hence, the normalization that capitalizes the enum's first letter when possible)
3. Minimal logging in SearchTags

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Multiple scopes in commit:

1. Trivial:
  * fixed typo constant name in ElasticSearchService
  * fixed some imports in various classes
2. Small: added persisting local repository profile for testing the simple search, and reference in RepositoryConfiguration
3. Big: refactored simple search to conform with ElasticSearch improvements, namely with multi-tag search, lowercase search, multi-wildcard search and removing non-tagged parsing of anything but name.
  Impact:
  * ModelRepository (nominal fix)
  * SearchParameters (added utilities)
  * ModelSearchUtil (full rewrite / removed parsing from scope, leaving only service-scoped logic)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Small fixes in SimpleSearch business logic:

1. Made createQueryFromExpression static
2. Removed useless additional space between WHERE and first constraint when building the query
3. Appended wildcard to the end of names if any in given parameters (and if any applicable), to harmonize with ElasticSearch query and for backwards compatibility (the Angular controller used to do that - moved to the back-end)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Simple search tests

This initial change set includes:

1. Tests for each tag + freetext search for model name
2. Moved the previous tests to the new search package, and modifying a few in cases where the functionality changed
3. Added one test resource
4. Added one intermediary test class for some boilerplate functionality and constants

Issues:

* Importing models is proving quite time-expensive, and the cost is very salient now that many search tests are added
* Due to the architecture in the parent class AbstractIntegrationTest, importing models currently has to take place before each test
* As such it would be much better to find a way to import the model statically on @BeforeClass once per test class
* However, that may imply some refactory or re-writing

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Search tests: big refactory for performance.

1. New SearchTestInfrastructure class to be used statically by search test classes
2. Some additional javadoc
3. Separating original search test into 2 classes by model
4. Refactoring logic in new search classes to leverage the static mechanism

Performance gain is huge - now 124 tests run in < 1s total (vs. several minutes previously).

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Search tests:

1. Added / cleaned up some mixed tests
2. Made SearchTestInfrastructure class final

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Search bugfix:

1. Fixed internal invocations of search with untagged type failing in tests (and would fail at least in one occurrence in real life)
2. Extraneous/trivial: fixed javadoc in search service interface

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Small fixes in ElasticSearch service: removed term queries to ensure full case-insensitivity in non-wildcarded searches.
Also amended some javadoc.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Changed ElasticSearch index to reflect wildcard, case-insensitive searchability for formerly non-text fields such as enumerated types, etc.
Added controller and interface definition/ES implementation for force-reindexing all fields according to (assuming changed) mapping.
This only works with Elastic Search, just as the other reindex functionality.

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Documentation

* Created ElasticSearch's Readme.md
* Linked to the future public version of the latter in the vorto_repository-1.0.yml resource describing the search API

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Small glitches fix

* Better handling of unparsed values in SearchTags, to avoid overloading a search with unwanted garbage in case tag is to be treated as case-insensitive
* Better naming of tags in Readme.md

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Fine-tune on "name" search resolution:

* Un-tagged names resolve as before (displayName, description, searchableName)
* Tagged names only resolve as displayName (which always seems to equal ModelId#getName)
* This only seems to function properly with the Elasticsearch index, and is therefore not supported with the simple search, where both tagged and un-tagged searches will all resolve to [vorto:name], which seems broad enough in hindsight

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Admin function: re-created index (added instead of just replacing reindex)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Cosmetics: changed "under the hood" to "behind the scenes" (slightly less colloquial)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Tests

* Unit tests for common search functionality (i.e. regardless of service logic)

Fixes

* Tag appending to tagged and un-tagged names containing no wildcards moved from service logic and added automatically to common search logic behind the scenes (the simple search still does convert the wildcards to SQL-friendly, as it should)

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Added a couple more search unit tests

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* 1. Build fix: fixed double-parenthesis in link to Vorto home and used https instead of plain http
2. Better description of forcing re-create index from UI perspective in doc

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Last-minute: forgot to fix one of the two URLs in docs

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>

* Another last-minute fix to accommodate signature changes in eclipse#2135

Signed-off-by: Menahem Julien Raccah Lisei <menahemjulien.raccahlisei@bosch-si.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants