Skip to content

Commit 0badbec

Browse files
authored
Merge pull request #342 from swirlai/get-readme
Get readme
2 parents 4d6abc3 + be1d734 commit 0badbec

File tree

1 file changed

+29
-214
lines changed

1 file changed

+29
-214
lines changed

README.md

Lines changed: 29 additions & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<h1>&nbsp; SWIRL METASEARCH <img alt='Swirl Metasearch Logo' src='https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/swirl-logo-only-blue.png' width=38 align=left /></h1>
1+
<h1>&nbsp; Swirl Metasearch 2.0<img alt='Swirl Metasearch Logo' src='https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/swirl-logo-only-blue.png' width=38 align=left /></h1>
22

33
[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg?color=blue&logoColor=blue&style=flat)](https://opensource.org/license/apache-2-0/)
44
[![GitHub Release](https://img.shields.io/github/v/release/swirlai/swirl-search?style=flat&label=Release)](https://github.com/swirlai/swirl-search/releases)
@@ -9,11 +9,13 @@
99
[![Newsletter](https://img.shields.io/badge/Newsletter-gray?logo=revue&logoColor=black&style=flat)](https://groups.google.com/g/swirl-announce)
1010
[![Twitter](https://img.shields.io/twitter/follow/SWIRL_SEARCH?label=Follow%20%40SWIRL_SEARCH&color=gray&logoColor=black&style=flat)](https://twitter.com/SWIRL_SEARCH)
1111

12-
SWIRL adapts and distributes queries to anything with a search API - search engines, databases, noSQL engines, cloud/SaaS services etc - and uses AI ([Large Language Models](https://techcrunch.com/2022/04/28/the-emerging-types-of-language-models-and-why-they-matter/)) to re-rank the unified results *without* extracting and indexing *anything*. It's intended for use by developers and data scientists who want to solve multi-silo search problems from enterprise search to new monitoring & alerting solutions that push information to users continuously.
12+
Swirl Metasearch adapts and distributes queries to anything with a search API - search engines, databases, noSQL engines, cloud/SaaS services etc - and uses AI ([Large Language Models](https://techcrunch.com/2022/04/28/the-emerging-types-of-language-models-and-why-they-matter/)) to re-rank the unified results *without* extracting and indexing *anything*. It supports OAUTH2 integration with enterprise services including Microsoft 365, Atlassian, JetBrains YouTrack and more coming soon.
13+
14+
Using the updated Spyglass UI, knowledge workers can systematically review the best results from additional configured services including Apache [Solr](https://solr.apache.org/), [ChatGPT](https://openai.com/blog/chatgpt/), [Elastic](https://www.elastic.co/cn/downloads/elasticsearch), [OpenSearch](https://opensearch.org/downloads.html) | [PostgreSQL](https://www.postgresql.org/), [Google BigQuery](https://cloud.google.com/bigquery) plus generic HTTP/GET/JSON with configurations for premium services like [Google's Programmable Search Engine](https://programmablesearchengine.google.com/about/), [Miro](https://miro.com/app/) and [Northern Light Research](https://northernlight.com/).
1315

1416
![Metasearch diagram](https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/swirl_arch_diagram.jpg)
1517

16-
Built on the Python/Django/RabbitMQ stack, SWIRL includes connectors to Apache [Solr](https://solr.apache.org/), [ChatGPT](https://openai.com/blog/chatgpt/), [Elastic](https://www.elastic.co/cn/downloads/elasticsearch), [OpenSearch](https://opensearch.org/downloads.html) | [PostgreSQL](https://www.postgresql.org/), [Google BigQuery](https://cloud.google.com/bigquery) plus generic HTTP/GET/JSON with configurations for premium services like [Google's Programmable Search Engine](https://programmablesearchengine.google.com/about/), [Miro](https://miro.com/app/) and [Northern Light Research](https://northernlight.com/).
18+
Built on the Python/Django stack, Swirl is intended for use by search managers, developers, data scientists and engineers who want to solve multi-silo search problems - including notification services - without moving, re-indexing or re-permissioning sensitive information.
1719

1820
Learn more: [Documentation Wiki](https://github.com/swirlai/swirl-search/wiki)
1921

@@ -37,276 +39,90 @@ After a few minutes the following or similar should appear:
3739

3840
```
3941
ssdtest-app-1 | Command successful!
40-
ssdtest-app-1 | __S_W_I_R_L__1_._1_0_._1________________________________________________________
41-
ssdtest-app-1 |
42+
ssdtest-app-1 | __S_W_I_R_L__2_._0______________________________________________________________
43+
ssdtest-app-1 |
4244
ssdtest-app-1 | Warning: logs directory does not exist, creating it
4345
ssdtest-app-1 | Start: rabbitmq -> rabbitmq-server ... Ok, pid: 53
4446
ssdtest-app-1 | Start: celery-worker -> celery -A swirl_server worker ... Ok, pid: 577
4547
ssdtest-app-1 | Start: celery-beats -> celery -A swirl_server beat --scheduler django_celery_beat.schedulers:DatabaseScheduler ... Ok, pid: 609
4648
ssdtest-app-1 | Updating .swirl... Ok
47-
ssdtest-app-1 |
49+
ssdtest-app-1 |
4850
ssdtest-app-1 | PID TTY TIME CMD
4951
ssdtest-app-1 | 53 ? 00:00:00 rabbitmq-server
5052
ssdtest-app-1 | 577 ? 00:00:11 celery
5153
ssdtest-app-1 | 609 ? 00:00:06 celery
52-
ssdtest-app-1 |
54+
ssdtest-app-1 |
5355
ssdtest-app-1 | Command successful!
5456
ssdtest-app-1 | 2023-01-21 13:16:11,070 INFO Starting server at tcp:port=8000:interface=0.0.0.0
5557
ssdtest-app-1 | 2023-01-21 13:16:11,074 INFO HTTP/2 support not enabled (install the http2 and tls Twisted extras)
5658
ssdtest-app-1 | 2023-01-21 13:16:11,075 INFO Configuring endpoint tcp:port=8000:interface=0.0.0.0
5759
ssdtest-app-1 | 2023-01-21 13:16:11,079 INFO Listening on TCP address 0.0.0.0:8000
5860
```
5961

60-
* Open the following URL with a browser:
61-
62-
```
63-
http://localhost:8000/swirl/search/
64-
```
65-
66-
The search page will appear. Login with username `admin` and password `password`.
67-
68-
* Open the following URL with a browser:
62+
* Open the following URL with a browser:
6963

7064
```
7165
http://localhost:8000/spyglass/
7266
```
7367

74-
The Spyglass search form should appear:
68+
The search page will appear. Click `Log Out` at top, right. The Swirl login page will appear:
7569

76-
![Spyglass search form](https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/spyglass_search_form.png)
70+
![Swirl Login](https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/swirl_login.png)
7771

78-
* Enter a search into the search box, and click the `Search` button. A spinner will appear briefly, before ranked results appear:
72+
Enter username `admin` and password `password`. Then click Login.
7973

80-
![Spyglass search results](https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/spyglass_result_1.png)
74+
* Enter a search in the search box and press the search button. Ranked results will appear in just a few seconds!
8175

82-
* To switch to table view, click the `Table View` button:
83-
84-
![Spyglass search results, table view](https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/spyglass_result_2.png)
85-
86-
* To view the JSON response, open the following URL:
87-
88-
```
89-
http://localhost:8000/swirl/search/
90-
```
76+
![Swirl Metasearch 2.0 Results](https://raw.githubusercontent.com/wiki/swirlai/swirl-search/images/swirl_metasearch_results.png)
9177

92-
The most recent Search object will be displayed. Click the result_url to view the JSON Response.
78+
:info: Swirl includes three (3) Google Programmable Search Engines (PSEs), complete with shared credentials, to get you up and running with right away. These credentials are shared with the SWIRL Community.
9379

94-
<details>
95-
<summary>View JSON Response</summary>
80+
:info: Using Swirl with Microsoft 365 requires installation and approval by an authorized company administrator. For more information please review the [M365 Guide](https://github.com/swirlai/swirl-search/wiki/5.-M365-Guide) or [contact us](mailto:[email protected]) for more information.
9681

97-
98-
```
99-
100-
"messages": [
101-
"__S_W_I_R_L__1_._1_0_._1__________________________________________________________",
102-
"[2023-01-21 15:02:53.696346] Retrieved 10 of 3530 results from: Mergers & Acquisitions (web/Google PSE)",
103-
"[2023-01-21 15:02:53.731620] Retrieved 10 of 2070000000 results from: Strategy Consulting (web/Google PSE)",
104-
"[2023-01-21 15:02:53.854734] Retrieved 10 of 120000 results from: Enterprise Search (web/Google PSE)",
105-
"[2023-01-21 15:02:54.228330] DedupeByFieldPostResultProcessor updated 1 results",
106-
"[2023-01-21 15:02:55.203736] CosineRelevancyPostResultProcessor updated 29 results",
107-
"[2023-01-21 15:02:59.241287] Results ordered by: RelevancyMixer"
108-
],
109-
"info": {
110-
"Enterprise Search (web/Google PSE)": {
111-
"found": 120000,
112-
"retrieved": 10,
113-
"filter_url": "http://localhost:8000/swirl/results/?search_id=2&provider=1",
114-
"query_string_to_provider": "enterprise search",
115-
"query_to_provider": "https://www.googleapis.com/customsearch/v1?cx=0c38029ddd002c006&key=AIzaSyDeB1y9l6OQW0dhVdZ9X_Xb2br_SK1K8YM&q=enterprise+search",
116-
"query_processors": [
117-
"AdaptiveQueryProcessor"
118-
],
119-
"result_processors": [
120-
"MappingResultProcessor"
121-
],
122-
"search_time": 1.7
123-
},
124-
"Strategy Consulting (web/Google PSE)": {
125-
"found": 2070000000,
126-
"retrieved": 10,
127-
"filter_url": "http://localhost:8000/swirl/results/?search_id=2&provider=2",
128-
"query_string_to_provider": "enterprise search",
129-
"query_to_provider": "https://www.googleapis.com/customsearch/v1?cx=7d473806dcdde5bc6&key=AIzaSyDeB1y9l6OQW0dhVdZ9X_Xb2br_SK1K8YM&q=enterprise+search",
130-
"query_processors": [
131-
"AdaptiveQueryProcessor"
132-
],
133-
"result_processors": [
134-
"MappingResultProcessor"
135-
],
136-
"search_time": 1.6
137-
},
138-
"Mergers & Acquisitions (web/Google PSE)": {
139-
"found": 3530,
140-
"retrieved": 10,
141-
"filter_url": "http://localhost:8000/swirl/results/?search_id=2&provider=3",
142-
"query_string_to_provider": "enterprise search",
143-
"query_to_provider": "https://www.googleapis.com/customsearch/v1?cx=b384c4e79a5394479&key=AIzaSyDeB1y9l6OQW0dhVdZ9X_Xb2br_SK1K8YM&q=enterprise+search",
144-
"query_processors": [
145-
"AdaptiveQueryProcessor"
146-
],
147-
"result_processors": [
148-
"MappingResultProcessor"
149-
],
150-
"search_time": 1.6
151-
},
152-
"search": {
153-
"query_string": "enterprise search",
154-
"query_string_processed": "enterprise search",
155-
"rescore_url": "http://localhost:8000/swirl/search/?rescore=2",
156-
"rerun_url": "http://localhost:8000/swirl/search/?rerun=2"
157-
},
158-
"results": {
159-
"retrieved_total": 29,
160-
"retrieved": 10,
161-
"federation_time": 3.0,
162-
"next_page": "http://localhost:8000/swirl/results/?search_id=2&page=2"
163-
}
164-
},
165-
"results": [
166-
{
167-
"swirl_rank": 1,
168-
"swirl_score": 8641.028729276184,
169-
"searchprovider": "Enterprise Search (web/Google PSE)",
170-
"searchprovider_rank": 1,
171-
"title": "*Enterprise* *search* - Wikipedia",
172-
"url": "https://en.wikipedia.org/wiki/Enterprise_search",
173-
"body": "*Enterprise* *search* is the practice of making content from multiple *enterprise-type* sources, such as databases and intranets, *searchable* to a defined audience ...",
174-
"date_published": "unknown",
175-
"date_retrieved": "2023-01-21 15:02:53.854964",
176-
"author": "",
177-
"payload": {
178-
"cacheId": "D6cJRzESeEoJ"
179-
},
180-
"explain": {
181-
"stems": "enterpris search",
182-
"title": {
183-
"enterprise_search_*": 0.9434668430078893,
184-
"Enterprise_search_0": 0.9434668430078893,
185-
"Enterprise_0": 0.6651386968008296,
186-
"search_1": 0.9049768381205389,
187-
"result_length_adjust": 2.3333333333333335,
188-
"query_length_adjust": 1.0
189-
},
190-
"body": {
191-
"enterprise_search_*": 0.6018024110405671,
192-
"Enterprise_search_0": 0.571031804774827,
193-
"search_1": 0.5442048484158057,
194-
"result_length_adjust": 1.0,
195-
"query_length_adjust": 1.0
196-
}
197-
}
198-
},
199-
{
200-
"swirl_rank": 2,
201-
"swirl_score": 7348.585219407358,
202-
"searchprovider": "Strategy Consulting (web/Google PSE)",
203-
"searchprovider_rank": 6,
204-
"title": "Intelligent *Enterprise* *Search*",
205-
"url": "https://www.accenture.com/dk-en/services/applied-intelligence/intelligent-enterprise-search",
206-
"body": "Accenture helps clients implement intelligent *enterprise* *search* solutions using AI technologies, such as natural language processing and machine learning.",
207-
"date_published": "unknown",
208-
"date_retrieved": "2023-01-21 15:02:53.780191",
209-
"author": "",
210-
"payload": {},
211-
"explain": {
212-
"stems": "enterpris search",
213-
"title": {
214-
"enterprise_search_*": 0.9608442937138034,
215-
"Enterprise_Search_1": 1.0,
216-
"Enterprise_1": 0.7935776562186374,
217-
"Search_2": 1.0,
218-
"result_length_adjust": 2.3333333333333335,
219-
"query_length_adjust": 1.0
220-
},
221-
"body": {
222-
"enterprise_search_*": 0.7308253502908216,
223-
"enterprise_search_5": 0.7899886473674567,
224-
"enterprise_5": 0.8224356551634711,
225-
"search_6": 0.6706759394116855,
226-
"result_length_adjust": 1.1578947368421053,
227-
"query_length_adjust": 1.0
228-
}
229-
}
230-
},
231-
{
232-
"swirl_rank": 3,
233-
"swirl_score": 6636.90423527112,
234-
"searchprovider": "Strategy Consulting (web/Google PSE)",
235-
"searchprovider_rank": 2,
236-
"title": "Intelligent *Enterprise* *Search* | Accenture",
237-
"url": "https://www.accenture.com/us-en/services/applied-intelligence/intelligent-enterprise-search",
238-
"body": "Intelligent *enterprise* *search* uses AI technologies, such as Natural Language Processing (NLP), semantic search, and Machine Learning (ML), to provide an engaged ...",
239-
"date_published": "unknown",
240-
"date_retrieved": "2023-01-21 15:02:53.745475",
241-
"author": "",
242-
"payload": {},
243-
"explain": {
244-
"stems": "enterpris search",
245-
"title": {
246-
"enterprise_search_*": 0.9294430473589433,
247-
"Enterprise_Search_1": 0.9505501863924661,
248-
"Enterprise_1": 0.8166240031067878,
249-
"Search_2": 0.8792733859459471,
250-
"result_length_adjust": 1.75,
251-
"query_length_adjust": 1.0
252-
},
253-
"body": {
254-
"enterprise_search_*": 0.7327504309736037,
255-
"enterprise_search_1": 0.6809326651912151,
256-
"enterprise_1": 0.6592383943038718,
257-
"search_2": 0.5937011247188788,
258-
"search_13": 0.6189125063789584,
259-
"result_length_adjust": 1.0,
260-
"query_length_adjust": 1.0
261-
}
262-
}
263-
},
264-
...etc...
265-
```
266-
</details>
267-
268-
<br/>
269-
270-
**Warning: The Docker version of SWIRL does *not* retain results or configuration when shut down!**
82+
:Warning: The Docker version of SWIRL does *not* retain results or configuration when shut down!
27183

27284
Learn more: [Quick Start Guide](https://github.com/swirlai/swirl-search/wiki/1.-Quick-Start)
27385

27486
<br/>
27587

276-
# Try Hosted SWIRL
88+
# Try Swirl Cloud
27789

278-
### If interested in a free trial of SWIRL as a managed service, please [contact support](mailto:support@swirl.today)!
90+
### For information about Swirl as a managed service, please [contact us](mailto:hello@swirl.today)!
27991

28092
<br/>
28193

28294
# Download SWIRL
28395

284-
| Version | Date | Notes |
96+
| Version | Date | Notes |
28597
| --------------------------- | --------------------------- | ----- |
286-
| [Swirl Metasearch 1.10.1](https://github.com/swirlai/swirl-search/releases/tag/v1.10.1) | 04-14-2023 | [Release 1.10.1](https://github.com/swirlai/swirl-search/releases) |
98+
| [Swirl Metasearch 2.0](https://github.com/swirlai/swirl-search/releases/tag/v2.0) | 05-22-2023 | [Release 2.0](https://github.com/swirlai/swirl-search/releases) |
28799

288100
<br/>
289101

290102
# Documentation Wiki
291103

292-
### [Home](https://github.com/swirlai/swirl-search/wiki) | [Quick Start](https://github.com/swirlai/swirl-search/wiki/1.-Quick-Start) | [User Guide](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide) | [Developer Guide](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide) | [Admin Guide](https://github.com/swirlai/swirl-search/wiki/4.-Admin-Guide)
104+
### [Home](https://github.com/swirlai/swirl-search/wiki) | [Quick Start](https://github.com/swirlai/swirl-search/wiki/1.-Quick-Start) | [User Guide](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide) | [Developer Guide](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide) | [Admin Guide](https://github.com/swirlai/swirl-search/wiki/4.-Admin-Guide) | [M365 Guide](https://github.com/swirlai/swirl-search/wiki/5.-M365-Guide)
293105

294106
<br/>
295107

296108
# Key Features
297109

110+
* [Microsoft 365 integration and OAUTH2 support](https://github.com/swirlai/swirl-search/wiki/5.-M365-Guide)
111+
298112
* [SearchProvider configurations](https://github.com/swirlai/swirl-search/tree/main/SearchProviders) for all included Connectors. They can be [organized with the active, default and tags properties](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide#organizing-searchproviders-with-active-default-and-tags).
299113

300114
* [Adaptation of the query for each provider](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide#search-syntax) such as rewriting `NOT term` to `-term`, removing NOTted terms from providers that don't support NOT, and passing down the AND, + and OR operators.
301115

302116
* [Synchronous or asynchronous search federation](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide#architecture) via [APIs](http://localhost:8000/swirl/swagger-ui/)
303117

304-
* [Optional subscribe feature](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide#subscribing-to-a-search) to continuously monitor any search for new results
118+
* [Optional subscribe feature](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide#subscribing-to-a-search) to continuously monitor any search for new results
305119

306-
* Pipelining of [Processor](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide#processors) stages for real-time adaptation and transformation of queries, responses and results
120+
* Pipelining of [Processor](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide#processors) stages for real-time adaptation and transformation of queries, responses and results
307121

308122
* [Results stored](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide#result-object) in SQLite3 or PostgreSQL for post-processing, consumption and/or analytics
309123

124+
* Built-in [Query Transformation](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide#query-transformations) support, including re-writing and replacement
125+
310126
* [Matching on word stems](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide#relevancy) and [handling of stopword](https://github.com/swirlai/swirl-search/wiki/3.-Developer-Guide#stopwords-language) via NLTK
311127

312128
* [Duplicate detection](https://github.com/swirlai/swirl-search/wiki/2.-User-Guide#detecting-and-removing-duplicate-results) on field or by configurable Cosine Similarity threshold
@@ -336,4 +152,3 @@ Learn more: [Quick Start Guide](https://github.com/swirlai/swirl-search/wiki/1.-
336152
* Email: [[email protected]](mailto:[email protected]) with issues, requests, questions, etc - we'd love to hear from you!
337153

338154
<br/>
339-

0 commit comments

Comments
 (0)