.. _simplesearch:
SimpleSearch
************
SimpleSearch offers a one-step solution for geo-data querying, powered by Solr for example. Giving only one input field
which can be directly embedded into the toolbar, it will send the entered search term to a configurable URL where it
expects to receive a JSON-formatted data back which includes a label and a geometry attribute for each entry.
Geometry data can be encoded as WKT or in GeoJSON format.
.. image:: ../../../../../figures/simplesearch.png
:scale: 80
Configuration
=============
.. image:: ../../../../../figures/simplesearch_configuration_a.png
:scale: 80
.. image:: ../../../../../figures/simplesearch_configuration_b.png
:scale: 80
* **Title:** Title of the element. The title will be listed in "Layouts" and allows to distinguish between different buttons. It will be indicated if "Show label" is activated.
* **Query URL:** Solr URL for the search (e.g. ``http://localhost:8080/solr/core0/select?wt=json&indent=true``).
* **Query URL key:** The query parameter key to append (e.g. ``q``).
* **Query Whitespace replacement pattern:** Pattern for replacing white spaces.
* **Query key format:** Simple search format (e.g. ``%s``).
* **Token search/ replace (JavaScript regex):** Tokenizer split/ search/ replace regexp.
* Token, e.g.: ``[^a-zA-Z0-9äöüÄÖÜß]``
* Token search, e.g.: ``([a-zA-ZäöüÄÖÜß]{3,})``
* Token replace, e.g.: ``$1*``
* **Collection path:** Can be a dotted attribute path to extract from the query result (e.g. ``response.docs``).
* **Label attribute:** Name of the attribute to use for entry labeling (e.g. ``label``).
* **Geom attribute:** Name of the geometry data attribute (e.g. ``geom``).
* **Geom format:** geometry data format, can be WKT or GeoJSON (e.g. ``WKT``).
* **Delay:** Autocomplete delay. Use 0 to disable autocomplete (e.g. ``300``).
* **Result buffer:** buffer result geometry with this (map units) before zooming (e.g. ``10``).
* **Result minscale/ maxscale:** scale restrictions for zooming, ~ for none (e.g. ``1000`` und ``5000``).
* **Result icon url:** icon to display as result marker (e.g. ``http://demo.mapbender3.org/bundles/mapbendercore/image/pin_red.png``).
* **Result icon offset:** Offset x and y for the icon (e.g. ``0,0``).
YAML-Definition
--------------------
.. code-block:: yaml
query_url: http://example.com/solr/core/0/select?wt=json&indent=true&rows=8 # Example Solr URL
query_key: q # The query parameter key to append
query_ws_replace: # Pattern for replacing white spaces.
query_format: '%s' # Simple search format.
token_regex: [^a-zA-Z0-9äöüÄÖÜß] # Tokenizer split regexp.
token_regex_in: ([a-zA-ZäöüÄÖÜß]{3,}) # Tokenizer search regexp.
token_regex_out: '$1*' # Tokenizer replace regexp.
collection_path: response.docs # Can be a dotted attribute path to extract from the query result.
label_attribute: label # Name of the attribute to use for entry labeling
geom_attribute: geom # Name of the geometry data attribute
geom_format: WKT # geometry data format, can be WKT or GeoJSON
delay: 300 # Autocomplete delay. Use 0 to disable autocomplete.
result_buffer: 50 # buffer result geometry with this (map units) before zooming
result_minscale: 1000 # scale restrictions for zooming, ~ for none
result_maxscale: 5000
result_icon_url: http://demo.mapbender3.org/bundles/mapbendercore/image/pin_red.png # icon to display as result marker
result_icon_offset: -6,-38 # Offset x and y for the icon
How to setup Solr
==================
Installation
------------
Download Apache Solr and extract it to any folder. After successfully extracting the file Solr can be installed as a service in a Linux system by calling solr/bin/install_solr_service.sh.
* **Download**: http://lucene.apache.org/solr/
* **Documentation**: http://lucene.apache.org/solr/resources.html#documentation
* **Quickstart**: http://lucene.apache.org/solr/quickstart.html
**Installing** Apache Solr via the terminal f.e. in the data directory:
.. code-block:: yaml
cd /data
wget http://apache.lauf-forum.at/lucene/solr/5.4.1/solr-5.4.1.tgz
tar -zxvf solr-5.4.1.tgz
cd solr-5.4.1/
Apache Solr runs of Java 7 or greater, Java 8 is verified to be compatible and may bring some performance improvements. When using Oracle Java 7 or OpenJDK 7, be sure to not use the GA build 147 or update versions u40, u45 and u51! We recommend using u55 or later.
Start and stop
---------------
You can start and stop Solr via the terminal by the following commands:
**Start Solr:**
.. code-block:: yaml
/data/solr-5.4.1/bin/solr start -s /data/solr-5.4.1/server/solr
**Stop Solr:**
.. code-block:: yaml
/data/solr-5.4.1/bin/solr stop -all
* **Solr-Administration page:**
* for the management of the cores
* http://localhost:8983/solr
Solr-Core
---------
The Solr home folder is the area in which the various Solr-Cores for the search are located.
File: solr-5.4.1/server/solr/solr.xml
Enter the following XML-block in the file:
.. code-block:: yaml
The solr.xml identifies the directory as a Solr-folder containing the cores. Here you can store your own Solr cores. However, since we want to operate independently of the Solr version we create a separate directory with the cores. If you want to skip this step, then perform the following instructions in the directory solr-5.4.1/server/solr.
Your Solr-Core
---------------
For the cores create a folder under data/solr_data and copy the *solr.yml* from the directory /data/solr-5.4.1/server/solr in this directory (data/solr_data/solr.yml). Then create a new folder for your core. For this documentation we used the core *places* among data/solr_data/places.
Each core consists of the three configuration files:
* **core.properties**
* By core.properties the core of Solr is recognized as a core
* **solrconfig.xml**
* The solrconfig.xml describes the features of the core
* **schema.xml**
* The schema.xml describes the construction of the index
Copy the configuration files from the directory /data/solr-5.4.1/server/solr/configsets/basic_configs in the directiory of the core under data/solr_data/places or insert it on your own with the following contents:
Adaptation of configuration files under /data/solr-5.4.1/server/solr/configsets/basic_configs/conf:
* **core.properties**
* data/solr_data/places/core.properties
* Adapting core.properties:
* Put in the following configuration block:
.. code-block:: yaml
name=places
shard=${shard:}
collection=${collection:places}
config=${solrconfig:solrconfig.xml}
schema=${schema:schema.xml}
coreNodeName=${coreNodeName:}
* **solrconfig.xml**
* /data/solr_data/places/conf/solrconfig.xml
* Adapting solrconfig.xml:
* Put in the following configuration block:
.. code-block:: yaml
5.4.0
${solr.data.dir:}
* **schema.xml**
* /data/solr_data/places/conf/schema.xml
* Adapting schema.xml:
* Put in the following configuration block:
.. code-block:: yaml
id
If you want to save certain words as *Stopwords*, you can save them as a list in a file under /data/solr_data/places/conf/stopwords.txt.
Now you can restart Solr with your own core. Use the command we mentioned above to stop and then the following customized command to start the with the new Core:
* **Start Solr:**
.. code-block:: yaml
/data/solr-5.4.1/bin/solr start -s /data/solr_data
Solr example
------------
The directiory /solr-5.4.1/example contains Solr examples. Each example is contained in a
separate directory. To run a specific example, do:
.. code-block:: yaml
bin/solr -e where is one of:
cloud : SolrCloud example
dih : Data Import Handler (rdbms, mail, rss, tika)
schemaless : Schema-less example (schema is inferred from data during indexing)
techproducts : Kitchen sink example providing comprehensive examples of Solr features
To test this function run the following command in the terminal:
.. code-block:: yaml
/data/solr-5.4.1/bin/solr start -e techproducts
and go to http://localhost:8983/solr.
/data/solr-5.4.1/server/solr:
* Default solr.solr.home directory where Solr will create core directories; must contain solr.xml
/data/solr-5.4.1/server/solr/configsets:
* Directories containing different configuration options for running Solr.
* basic_configs: Bare minimum configuration settings needed to run Solr.
* example is under /data/solr-5.4.1/server/solr/configsets/basic_configs
Indexing Solr XML
-----------------
Use the example data in /solr-5.4.1./example/exampledocs/*.xml or your own data to index the example Solr XML files.
For the indexing, you have two options:
* **DataImportHandler**
* establishing a PostgreSQL data connection
* **UpdateHandler**
* to send data via HTTP post directly to Solr
DataImportHandler
------------------
Import records from a PostgreSQL-database using the Data Import Handler.
Adaptation of the Data Connection in the configutation files under data/solr_data/places/config:
* **solrconfig.xml**
* **data-config.xml**
* configurate the PostgreSQL data connection:
.. code-block:: yaml
* download matching PostgreSQL-driver:
* https://jdbc.postgresql.org/download.html
.. code-block:: yaml
cd /data/solr_data/places/
wget https://jdbc.postgresql.org/download/postgresql-9.1-903.jdbc4.jar
UpdateHandler
--------------
You must adjust the UpdateHandler in the solrconfig.xml under data/solr_data/places/config, then you can send documents with the following command to Solr.
Example csv:
.. code-block:: yaml
/opt/solr/bin/post -c places /opt/training/data/germany.csv
Solr-scheme
-----------
The Solr-scheme consists of the following parts:
* **Fields** (field)
* **Field types** (fieldType)
* **Specifying an ID-Field** by uniqueKey
Secure Jetty
-------------
In order to secure the Apache Solr outward you must configure the Jetty Security.
* Release of certain IP addresses to access the Jetti
* Configuration under solr/etc/jetty.xml
.. code-block:: yaml
Class, Widget & Style
=========================
* **Class:** Mapbender\\CoreBundle\\Element\\SimpleSearch
* **Widget:** mapbender.element.simplesearch.js
HTTP Callbacks
==============
- /search: Widget proxy which then queries configured URL. In dev-mode the final query URL will be returned as a
x-mapbender-simplesearch-url header for easier debugging.
JavaScript API
==============
None.
JavaScript Signals
==================
None.