2009-07-06 7 views
4

J'ai construit un index de recherche en utilisant PHP Zend Framework Search (basé sur Lucene). La recherche est pour un site d'achat/vente.Comment exclure la recherche de champs spécifiés en utilisant Zend Search (Lucene)

Mon index de recherche comprend les champs suivants:

article-id (UnIndexed)
élément-titre (texte)
élément-description (UnStored)
point-tags (texte)
item- prix (mot-clé)
vendeur-id (UnIndexed)
vendeur nom (texte)

Je veux que l'utilisateur recherche l'ind ex., filtrer leur recherche en ne recherchant que des éléments ou en recherchant des vendeurs par leur nom.

Si je fais une recherche en utilisant les paramètres de recherche par défaut de Lucene, je vais chercher les 5 champs de l'article et le champ du nom du vendeur. Ce n'est pas ce que je veux arriver. Ce que je voudrais, c'est quand l'utilisateur fait la recherche que je veux qu'ils soient obligés de choisir dans un menu déroulant s'ils cherchent un article, ou pour un nom de vendeur.

Comment puis-je indiquer la requête de recherche lors de la recherche d'éléments pour ignorer le champ du nom du vendeur? Et lors de la recherche d'un nom de vendeur, comment puis-je dire à la requête de recherche de ne pas effectuer de recherche dans l'un des champs d'article? Ou est-il préférable de créer un index séparé pour les noms de vendeur?

Répondre

6

Il n'existe actuellement aucun moyen explicite de rechercher un champ dans le langage de requête de Lucene ou l'API Zend_Search_Lucene de construction de requête.

Toutefois, vous pouvez explicitement énumérer les champs que vous souhaitez rechercher dans une requête. Un exemple serait:

seller-name: Joe McBob 

Si vous utilisez cette approche, vous devrez énumérer explicitement les champs que vous souhaitez interroger, et ce qu'il faut rechercher en eux. Donc, si vous avez également besoin de rechercher votre champ item-title avec le même texte, vous devrez dupliquer ce qui précède, mais avec le nom du champ différent. Un exemple serait:

seller-name: Joe McBob OR item-title: JoeMcBob 

Vous pouvez, bien sûr, faire tout cela grâce à l'API de construction de requête qui fournit Zend_Search_Lucene, aussi bien. Le manual a quelques bons exemples ici. Une chose à noter ici est que, comme vous l'avez découvert, Zend_Search_Lucene recherchera TOUS les champs par défaut. C'est l'une des façons dont il diffère de Java Lucene. Vous pouvez toutefois définir un champ par défaut à interroger à l'aide de la méthode statique setDefaultSearchField de la classe Zend_Search_Lucene.

+0

Merci jason. Je pensais que c'était ce que je devais faire. Je voulais vérifier la base de connaissances ici pour voir s'il y avait une meilleure solution et vous avez satisfait ma question! – justinl

Questions connexes