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

Add search with ElasticSearch #82

Merged
merged 15 commits into from
Dec 3, 2015
Merged

Add search with ElasticSearch #82

merged 15 commits into from
Dec 3, 2015

Conversation

tsauerwein
Copy link
Member

  • Set up schema/mapping
  • Script to fill index from database (for migration and rebuild the index in case of a crash)
  • Sync index on update/insert document (for now synchronously)
  • Search web-service /search
    • Paging (not required for the simple search, only for advanced search)
    • Different document types
  • Fine-tune search (fuzziness, preferred language, search for names, multiple search words)
  • Set up ES on Travis
  • Remove bbcodes before sending to ES (or use a pattern_replace char filter?)
  • Fix tests (currently the search index in not synced in the tests because the transaction is not committed in the test environment)

closes #81

@asaunier
Copy link
Member

What about using a more explicit name for dir c2corg_api/scripts/es/, like c2corg_api/scripts/elasticsearch/?

@tsauerwein
Copy link
Member Author

@asaunier This conflicted with the package elasticsearch.

@tsauerwein tsauerwein mentioned this pull request Nov 26, 2015
@tsauerwein
Copy link
Member Author

There are still 2-3 issues that I have to work on, but besides this PR would be ready for a review.

@asaunier
Copy link
Member

Looks like an excellent work!

One question: is it possible to adapt the indexed fileds depending on the doc type? I know that in v5 with Solr, all documents are not indexed the same way. For instance (not sure if I remember well) only titles are indexed for summits (and routes?) but titles and "descriptions" (content) are both indexed for articles.

I don't know if we want to keep this distinction in v6 or if it's OK/better to indexed title/summary/description for all doc types. I can ask.

Please note that "route" docs are special: we most likely need to get the routes associated to a given waypoint when searching the waypoint title. But the waypoint title is not embedded in the route name (especially when you have several WP associated to a route).

For instance "Mont Blanc":

@tsauerwein
Copy link
Member Author

One question: is it possible to adapt the indexed fileds depending on the doc type?

Yes, that would be possible.

Please note that "route" docs are special: we most likely need to get the routes associated to a given waypoint when searching the waypoint title. But the waypoint title is not embedded in the route name (especially when you have several WP associated to a route).

I created an issue for this: #90

@tsauerwein
Copy link
Member Author

What remains on my todo list is the fine-tuning. I would like to do this at the same time I am integrating the search in the UI, because there might be changes to the ElasticSearch configuration required for the auto-completion.

So, please review! :)

@tsauerwein tsauerwein changed the title [WIP] Add search with ElasticSearch Add search with ElasticSearch Dec 3, 2015
@asaunier
Copy link
Member

asaunier commented Dec 3, 2015

(I have only looked at the 2 additional commits you have pushed after my last comments)

Stripping the BBcode when indexing the contents actually makes sense.
Please note that v5 also use additional formatting code in addition to BBcode, such as some markdown tags (eg. ## Approche).

The full parser is here: https://github.com/c2corg/camptocamp.org/blob/master/plugins/sfPunBBCodeParserPlugin/lib/sfPunBBCodeParser.class.php#L36
(sorry! :P)
Perhaps you could simply remove the bbcode and the lines starting by #?

Possible formatting is described here:
http://www.camptocamp.org/articles/151910/fr/aide-mise-en-forme-du-texte

Here is a simple example of formated contend:
http://www.camptocamp.org/routes/45154/fr/le-tarent-versant-n-voie-normale

##Accès 
De l’Etivaz, remonter le vallon de l’eau froide. La route est généralement dégagée jusqu’au chalet du Perruz (1197m), mais le peu de places disponibles fait qu’il est souvent préférable de se garer 350m plus tôt, voire carrément au village.
[img=195943 right]Itinéraire du Tarent, vu de la Tête à Josué[/img]
##Montée 
Du Perruz, longer la route jusqu’à la première épingle,  puis continuer tout droit sur le chemin forestier. Suivre ce chemin jusqu’à la prise d’eau (1280m). S’élever ensuite directement au SW en direction des chalets du Fodéra (1532m), puis du Lévanchy (1710m).
Depuis le haut du pâturage (1765m, approx. 577600/138490), rejoindre l’épaule du point 1822m par une traversée à main gauche le long de la route/gros sentier. C’est à cet endroit que bifurquent les randonneurs qui se dirigent vers Châtillon.
Du point 1822, par une traversée en faux-plat ascendant, rejoindre la combe N du Tarent. Le cas échéant, se méfier des pentes surplombant cette partie, qui sont constituées de dalles et d’herbe couchée. Remonter cette combe pour passer légèrement au S du point 2221m.
Du S du point 2221m, remonter une petite combe secondaire en direction du sommet. Par une petite pente plus raide (env. 35-40°), rejoindre à main droite une épaule située quelque dizaines de mètres au N du sommet (dépôt éventuel des skis). Le véritable sommet est ensuite atteint facilement par la crête. 
##Descente 
Par l’itinéraire de montée ou par les Beques. On suit alors toute le long la ligne d’écoulement de l’eau froide (légèrement en rive droite). Cette variante est généralement assez verneuse, ce qui fait que sa praticabilité dépend passablement de l’enneigement.

An advanced one:
http://www.camptocamp.org/summits/37355/fr/mont-blanc

[abs]Le Mont Blanc est le point culminant des Alpes et le plus haut sommet d'Europe occidentale[/abs]
[toc 2 right]
[img=188119 right]Lever de soleil sur le Mont Blanc[/img]

## Présentation
### Historique
La première ascension a été réalisée le 8 août 1786 par le docteur Michel Paccard et Jacques Balmat, à l'instigation de Horace-Bénédicte de Saussure qui offrit une récompense au premiers ascensionnistes.
[url=http://www.litteratureaudio.com/livre-audio-gratuit-mp3/horace-benedict-de-saussure-voyage-a-la-cime-du-mont-blanc.html]Récit audio de l'ascension par Horace-Bénédicte de Saussure[/url]... pour vos longues nuits en refuge.
Le récit de la première ascension (et des essais précédent), sans doute le plus proche de la réalité, est celui qui a été reconstitué ) partir de témoignages de Michel Pacard, traduit pour la première fois en français dans [[books/390824|Mont-Blanc, premières ascensions - 1770-1904]].

### Point Culminant des Alpes
Le mont Blanc s'élève au coeur du [[areas/14410|massif du Mont-Blanc]] et constitue le point culminant de la chaîne des Alpes (4808,7 m d'altitude selon la mesure de septembre 2014).

### Appartenance du sommet
Il se situe à cheval entre la Haute-Savoie (France) et la vallée d'Aoste (Italie). L'appartenance du sommet à la France ou à l'Italie est encore et toujours contestée par les deux états : la France considère le sommet intégralement français alors que les Italiens considèrent le sommet comme étant à cheval sur la frontière.

Lors d'une publication conjointe par l'IGN français et l'IGC italien d'une nouvelle série de cartes frontalières au 1/25.000, la frontière est représentée par quelques croix bien espacées qui disparaissent dans le secteur litigieux.
[url=http://fr.wikipedia.org/wiki/Histoire_de_la_fronti%C3%A8re_sur_le_mont_Blanc]Cf. Wikipédia[/url]

## Voies d'ascension


### Les 5 "voies normales"
Elles peuvent se combiner en traversée à la montée et à la descente selon les conditions, le mode de progression et la logistique que l'on accepte.
#### Arête des Bosses # L'itinéraire le plus emprunté

- [[routes/53781|Arête des Bosses]]

#### Par les 3 Monts # Itinéraire "moderne"

- [[routes/53788|Traversée des 3 Monts en aller-retour]]
- [[routes/46096|Traversée des 3 Monts >> Face N]]
- [[routes/48275|Traversée des 3 Monts >> Arête des Bosses]]

#### Par les Aiguilles Grises - Voie des Papes # Voie normale italienne

- [[routes/54151|Route des aiguilles Grises]]

#### Par les Grand Mulets # Itinéraire historique, plutôt pratiqué à ski

- [[routes/45967|Par les Grands Mulets]]
- [[routes/46950|Face N et Arête N du Dôme]]

#### Par la traversée Bionnassay - Mont Blanc # Itinéraire long et le plus technique mais très sauvage

- [[routes/54092|Traversée Dômes de Miage - Aiguille de Bionnassay - Mont Blanc]] ( en 3 jours )
- [[routes/181855|Traversée Aiguille de Bionnassay - Mont-Blanc]] ( en 2 jours )
### Ascensions alternatives
[i]Liste des itinéraires permettant d'accéder au sommet du Mont Blanc loin de la foule des voies normales (cotation généralement comprise entre AD et D[/i]
#### Versant Brenva
- [[routes/55742|Éperon de la Brenva]]
- [[routes/55289|Arête de Peuterey, depuis la Blanche de Peuterey]]

#### Peuterey - Freney - Brouillard
- [[routes/54513|Arête de l'Innominata (versions intégrale et directe)]]
- [[routes/54816|Intégrale de Peuterey par l'arête E de la Noire de Peuterey]]

#### Versant Miage
- [[routes/179300|Traversée Arête de Tricot - Aiguille de Bionnassay - Mont Blanc]]
- [[routes/58015|Contrefort Central du Miage]]
- [[routes/137794|Contrefort gauche du Miage (Jaccoux-Domenech)]]
- [[routes/56730|Eperon de la Tournette]]
- [[routes/49571|Versant W - Couloir Saudan]] et -[[routes/170457|Benedetti]], couloirs généralement empruntés à ski


### "Grand Alpinisme"
[i]Liste des itinéraires d'envergure sortant au sommet du Mont Blanc (cotation générale > TD).[/i]
#### Versant Brenva
- [[routes/55786|Grand Pilier d'Angle (Dufour-Frehel)]]
- [[routes/58106|Grand Pilier d'Angle (Cecchinel-Nominè/Boivin-Vallençant)]]

#### Peuterey - Freney - Brouillard
- [[routes/57800|Pilier central du Freney (voie classique)]]
- [[routes/181021|Pilier N du Freney (ou Gervasutti)]]
- [[routes/55851|Arête de Peuterey intégrale]]

### Voies de Descente
Plusieurs descentes possibles :

- par les [[routes/53788|3 Monts Blancs jusqu'à l'Aiguille du Midi]]
- par [[routes/53781|l'arête des Bosses et le refuge du Goûter]]
- par l'arête des Bosses et [[routes/45967|les Grands Mulets]] (risque de chutes de séracs)
- par [[routes/54151|les Aiguilles Grises]] (et retour côté italien)

Climbing routes may also be a bit complicated because of the "pitches" list that might be used:
http://www.camptocamp.org/routes/220643/fr/cornettes-de-bise-poeme-roc

[abs]7 belles longueurs à dominance dalle dans une très belle face.[/abs]
##Approche
De Bise, remonter le sentier du pas de la Bosse puis longer la face S des cornettes (un bon 1/4 d'heure) pour arriver au Secteur des dalles. Le nom de la voie est peint en rouge.

##Itinéraire

L# | 6a | Belle longueur dalleuse qui met bien dans l'ambiance de la voie.
L# | 6c | Très belle longueur où ça démarre bien gentiment puis ça se corse sévère dans la traversée à gauche (6c) : bien finaud sur petites prises. Lecture pas facile (ne pas monter tout droit, mais bien traverser sur la gauche pas trop haut).
L# | 6b+ | Départ physique et teigneux, ensuite c'est plus facile mais encore soutenu.
L# | 6b | Dalle à trous au départ puis sur le fil d'un éperon. 
L# | 6b | Très belle longueur bien rectiligne et continue, dans une dalle raide à trous.
L# | 6a+ | Grande longueur d'abord dans un petit dièdre/fissure puis en dalle sculptée.
L# | 6a | Dernière longueur sur le bord d'une magnifique dalle compacte, plus facile qu'il n'y paraît.

##Descente
En rappel dans la voie. On peut éventuellement sauter quelques relais. De R2 on arrive directement au sol avec une corde 2x50m.

but perhaps it's OK only removing tags such as L#

@tsauerwein
Copy link
Member Author

The '#'s are no problem, if I search for '##' I am getting no results. The main idea to remove the bbcodes was that if you for example search for "col" that you are not getting results where the bbcode "[col]" was used.

About tags like " [[routes/53781|Arête des Bosses]]": I'd just keep them, because they add useful information. For example if you search for "53781" you'd also find the documents that contain a link to this route. What do you think?

@asaunier
Copy link
Member

asaunier commented Dec 3, 2015

OK, that indeed makes sense.
Then the PR looks good to me.

@tsauerwein
Copy link
Member Author

@gberaudo, do you also want to take a look?

@gberaudo
Copy link
Contributor

gberaudo commented Dec 3, 2015

@tsauerwein, I will have a quick look now.

return []

documents = DBSession.\
query(model).\
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are all fields loaded from the database?
A great enhancement would be to only load the fields which will be actually sent in the response.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this would also be relevant for the listings. I was thinking about creating a separate model for the listings which only contains the fields needed for the listings. I will create an issue for it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes this could also be an option.

@gberaudo
Copy link
Contributor

gberaudo commented Dec 3, 2015

This PR looks great to me. +1 for merging.
I added some comments about possible improvements. These may be done later.

tsauerwein pushed a commit that referenced this pull request Dec 3, 2015
Add search with ElasticSearch
@tsauerwein tsauerwein merged commit 5a8441c into master Dec 3, 2015
@tsauerwein tsauerwein deleted the search branch December 3, 2015 17:29
@tsauerwein
Copy link
Member Author

Thanks for your comments.

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.

"Simple" search
3 participants