Comment faire fonctionner le composant de suggestion dans SolrNet?

J’ai configuré mon solrconfig.xml et mon schéma.xml pour rechercher les suggestions.

Je peux obtenir les suggestions de l’URL

http://localhost:8080/solr/collection1/suggest?q=ha&wt=xml 

Mon SolrConfig.xml ressemble à

Actuellement, ma requête solr ressemble à

            uid       .....  

Et mon schema.xml ressemble à ceci

    suggest name org.apache.solr.spelling.suggest.Suggester org.apache.solr.spelling.suggest.tst.TSTLookup true internal 0.5 2 int name="minPrefix">1 5 4 0.01 .01    wordbreak solr.WordBreakSolrSpellChecker name true true 10     text  true suggest <!--wordbreak--> on true 10 5 5 true true 10 5   spellcheck   

Mon code pour appeler l’API SolrNet se présente comme suit

 new SolrBaseRepository.Instance().Start(); var solr = ServiceLocator.Current.GetInstance<ISolrOperations>(); var options = new QueryOptions { FilterQueries = new ISolrQuery[] { new SolrQueryByField("type", type) } }; var results = solr.Query(keyword, options); return results; 

Cependant, je ne reçois aucune donnée. nombre de résultats est zéro. Et aussi la vérification orthographique dans les résultats est également zéro.

Je ne vois pas non plus la liste de suggestions dans les résultats.

entrez la description de l'image ici

S’il vous plaît aider

J’avais exactement les mêmes exigences mais je ne trouvais aucun moyen de gérer facilement les résultats de Suggester avec SolrNet. Malheureusement, SolrNet semble être construit autour du gestionnaire de demandes par défaut /select et ne prend actuellement en charge aucun autre gestionnaire incluant /suggest des mappages de type d’object ( T ). Il s’attend à ce que toutes les correspondances se produisent avec les résultats de document Solr indexés et non de résultats suggérant.

Par conséquent, la réponse de @Paige Cook n’a pas fonctionné pour moi. T type T avec des correspondances n’est pas compatible avec une réponse de résultat d’évocateur. Tout le code de plomberie standard, de l’initialisation de la demande ( Startup.Init() ) à l’interrogation ( ISolrQueryResults results = solr.Query() ) nécessite un type de document Solr mappé et non un simple tableau de chaînes que le suggérant fournit.

Par conséquent, (semblable à @dfay ), je suis allé à une demande Web et à l’parsing des résultats suggérés à partir de la réponse Web XML. La classe SolrConnection été utilisée pour cela:

 ssortingng searchTerm = "ha"; ssortingng solrUrl = "http://localhost:8080/solr/collection1"; ssortingng relativeUrl = "/suggest"; var parameters = new Dictionary                {                    {"q", searchTerm},                    {"wt", "xml"},                }; var solrConnection = new SolrConnection(solrUrl); ssortingng response = solrConnection.Get(relativeUrl, parameters); // then use your favorite XML parser to extract // suggestions from the reponse ssortingng 

Sinon, au lieu de XML, la demande peut renvoyer une réponse JSON à l’aide du paramètre wt=json :

 var parameters = new Dictionary                {                    {"q", searchTerm},                    {"wt", "json"}, // change this!                }; // then use your favorite JSON parser 

Pour exécuter votre requête sur le gestionnaire de requêtes /suggest que vous avez configuré, vous devez définir le paramètre qt Solr à l’aide des ExtraParameters de vos options de requête SolrNet, comme ci-dessous:

  new SolrBaseRepository.Instance().Start(); var solr = ServiceLocator.Current.GetInstance>(); var options = new QueryOptions { FilterQueries = new ISolrQuery[] { new SolrQueryByField("type", type) }, ExtraParams = new Dictionary{{"qt", "suggest"}}, }; var results = solr.Query(keyword, options); return results; 

Sinon, votre requête est toujours exécutée par rapport au gestionnaire de demandes standard /select (ou à tout ce que vous avez défini par défaut dans votre fichier solrconfig.xml).

Voir http://wiki.apache.org/solr/SolrRequestHandler , en particulier la section sur l’ancien comportement handleSelect = true. Si vous utilisez un serveur Solr plus récent, il s’agit probablement de votre problème. (ie le réglage “qt” n’a aucun effet et soit le gestionnaire par défaut dans SolrNet doit être changé, soit la configuration de Solr doit définir handleSelect = true.) Voici comment j’ai résolu ce problème dans mon cas:

 ISolrConnection connection = ServiceLocator.Current.GetInstance(); List> termsParams = new List>(); termsParams.Add(new KeyValuePair("terms.fl", "name")); termsParams.Add(new KeyValuePair("terms.prefix", mySearchSsortingng)); termsParams.Add(new KeyValuePair("terms.sort", "count")); ssortingng xml = connection.Get("/terms", termsParams); ISolrAbstractResponseParser parser = ServiceLocator.Current.GetInstance>(); SolrQueryResults results = new SolrQueryResults(); parser.Parse(System.Xml.Linq.XDocument.Parse(xml), results); TermsResults termResults = results.Terms; foreach (TermsResult result in termResults) { foreach (KeyValuePair kvp in result.Terms) { //... do something with keys } } 

Fondamentalement, j’utilise l’parsingur SolrNet et le code de connexion, mais pas le contenu de la requête. J’espère que cela t’aides.

Passer le paramètre qt ne marche PAS, du moins pas dans Solr 4.7, même avec handleSelect = true dans SolrConfig. Vous pouvez vérifier en spécifiant un gestionnaire personnalisé très différent de la valeur par défaut / select, par exemple, faites-le utiliser edismax et envoyez debugQuery = true dans ExtraParams et récupérez les résultats dans Fiddler.

De plus, si vous lisez l’explication sur l’indicateur handleSelect, il est écrit “si la requête utilise” / select “mais il n’y a pas de gestionnaire de requête portant ce nom”.

Vous ne voulez pas toucher ou désactiver le gestionnaire / select car Solr l’utilise lui-même.

J’ai fini par utiliser ExtraParams pour transmettre toutes les valeurs que j’ai définies dans mon gestionnaire personnalisé, il n’y en avait pas beaucoup. Cela semblait mieux que de simplement utiliser une partie de SolrNET et ensuite d’parsingr les résultats.