Comment puis-je mettre en œuvre la recherche de tag? avec lucene?

Je n’ai pas utilisé lucene. La dernière fois que j’ai posé la question (il y a plusieurs mois, peut-être un an), des personnes ont suggéré Lucene. Si je ne devrais pas utiliser Lucene, que devrais-je utiliser? Comme le dit l’exemple, il y a des articles marqués comme ceci

  1. pommes carottes
  2. pommes
  3. carottes
  4. pomme banane

Si un utilisateur recherche des pommes, cela ne me dérange pas s’il existe une préférence entre 1,2 et 4. Cependant, j’ai vu de nombreux forums le faire que je détestais, c’est lorsqu’un utilisateur recherche des carottes aux pommes 2 et 3 ont des résultats élevés alors qu’il est difficile de trouver même bien que cela corresponde mieux à ma recherche.

Aussi, j’aimerais avoir la possibilité de faire des recherches de carottes – des pommes qui ne me rapporteront que 3. Je ne suis pas sûr de ce qui devrait se passer si je cherche des carottes à la banane, Je recherche des pommes, des carottes, je serai heureux.

Lucene peut-elle faire ça? et par où dois-je commencer? J’ai essayé de le rechercher et quand je vois beaucoup de cours, je vais voir des tutoriels parler de documents, de pages Web, mais aucun n’a été clair sur ce qu’il faut faire quand j’aime taguer quelque chose. Si Lucene, que dois-je utiliser pour le marquage?

Lucene pour .net semble être mature. Pas besoin d’utiliser Java ou SOLR

Le langage de requête standard de Lucene permet des termes de recherche et une négation de rang égal.

Donc, si votre index Lucene avait un champ “tag”, votre requête serait

tag:apple* OR tag: carrot* 

Ce qui donnerait un rang égal à chaque mot et une pondération plus importante au document avec les deux balises

Pour nier une balise, utilisez cette

 tag:carrot* NOT tag:apple* 

Exemple simple pour montrer l’indexation et l’interrogation avec Lucene ici

Edit: Vous pouvez utiliser Lucene. Voici une explication sur la manière de procéder dans Lucene.net. Quelques bases de Lucene sont:

  • Document – est l’unité de stockage à Lucene. C’est un peu analogue à un enregistrement de firebase database.
  • Field – l’unité de recherche de Lucene. Analogue à une colonne de firebase database. Lucene recherche du texte en répondant à une requête et en la comparant à des champs. Un champ doit être indexé afin de permettre la recherche.
  • Jeton – l’atome de recherche dans Lucene. Habituellement, un mot, parfois une phrase, une lettre ou un chiffre.
  • Analyseur – la partie de Lucene qui transforme un champ en jetons.

Veuillez lire cet article de blog sur la création et l’utilisation d’un index Lucene.net.

Je suppose que vous étiquetez les articles de blog. Si je me trompe totalement, merci de le dire. Pour rechercher des balises, vous devez les représenter en tant qu’entités Lucene, notamment en tant que jetons à l’intérieur d’un champ “balises”.

Une façon de procéder consiste à atsortingbuer un document Lucene par article de blog. Le document aura au moins les champs suivants:

  • id: identifiant unique de l’article du blog.
  • contenu: le texte de l’article de blog.
  • tags: liste de tags.

Indexation: chaque fois que vous ajoutez une étiquette à une publication, en supprimez une ou que vous la modifiez, vous devez indexer la publication. L’parsingur transformera les champs en leur représentation de jeton.

 Document doc = new Document(); doc.Add(new Field("id", i.ToSsortingng(), Field.Store.YES, Field.Index.NO)); doc.Add(new Field("content", text, Field.Store.YES, Field.Index.TOKENIZED)); doc.Add(new Field("tags", tags, Field.Store.YES, Field.Index.TOKENIZED)); writer.AddDocument(doc); 

La partie restante est la récupération. Pour cela, vous devez créer un QueryParser et lui transmettre une chaîne de requête, comme ceci:

 QueryParser qp = new QueryParser(); Query q = qp.Parse(s); Hits = Searcher.Search(q); 

La syntaxe dont vous avez besoin pour s sera:

 tags: apples tags: carrots 

Pour chercher des pommes ou des carottes

 tags: carrots NOT tags: apples 

Voir la syntaxe Lucene Query Parser Syntax pour plus de détails sur la construction de s.