SOLR nicht die Suche auf bestimmte Felder
Gerade installiert, Solr, bearbeitet die schema.xml
, und versuche jetzt zu indizieren und darauf suchen mit einigen Testdaten.
In der XML-Datei schicke ich auf Solr, einer meiner Felder wie folgt Aussehen:
<field name="PageContent"><![CDATA[<p>some text in a paragrah tag</p>]]></field>
Gibt es HTML gibt, also hab ich wickelte es in CDATA.
In meinem Solr schema.xml
, die definition für das Feld sieht so aus:
<field name="PageContent" type="text" indexed="true" stored="true"/>
Bei mir lief der POSTing-tool, alles ok, aber wenn ich nach Inhalten suchen, die ich kenne, ist innerhalb der PageContent
Feld, bekomme ich keine Ergebnisse.
Jedoch, wenn ich die <defaultSearchField>
Knoten PageContent
es funktioniert. Aber wenn ich es auf einem anderen Feld, Sie sucht nicht in PageContent
.
Mache ich etwas falsch? was ist das Problem?
Zu klären, auf die Fehler:
Ich habe hochgeladen eine "doc" mit den folgenden Daten:
<field name="PageID">928</field>
<field name="PageName">some name</field>
<field name="PageContent"><![CDATA[<p>html content</p>]]></field>
In meinem schema habe ich definiert die Felder als solche:
<field name="PageID" type="integer" indexed="true" stored="true" required="true"/>
<field name="PageName" type="text" indexed="true" stored="true"/>
<field name="PageContent" type="text" indexed="true" stored="true"/>
Und:
<uniqueKey>PageID</uniqueKey>
<defaultSearchField>PageName</defaultSearchField>
Nun, wenn ich den Solr-admin-tool und suchen Sie nach "some name
" bekomme ich ein Ergebnis. Aber, wenn ich Suche "html content
", "html
", "content
" oder " 928
" bekomme ich keine Ergebnisse
Warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erwähnt Sie, dass Ihre Standard-such-Feld Seitenname, ich würde nicht erwarten, dass eine Suche nach "content", etwas zurückzugeben.
Du wohl gemeint zu setzen "PageContent:content" in das Suchfeld zum suchen von Daten in das Feld. Wenn Sie möchten, um die Suche auf mehrere Felder, die Sie wollen, check this out http://wiki.apache.org/solr/DisMaxRequestHandler. Der solr-admin-Konsole ist nicht so toll ein Instrument zu spielen, um mit all den DisMax such-Optionen, Sie wollen nur manipulieren der URL.
Egal, ich Stimme mit den vorherigen poster, wenn Sie Ihre Analyse-setup ist kein setup richtig zu beschäftigen mit HTML sind Sie wahrscheinlich, um alle Arten von unerwarteten Ergebnisse. Streifen Sie die HTML-und-index-nur text.
Wenn Sie möchten, dass Ihre standard-Abfrage-handler zu suchen, gegen alle Ihre Felder, die Sie ändern können Sie es in Ihrem solrconfig.xml (ich immer noch eine zweite Abfrage-handler statt einer änderung der "standard". In der qf-Bereich ist die Liste der Felder, die Sie durchsuchen möchten gegen. Es ist eine durch Leerzeichen getrennte Liste.
indexed
Attribut als WAHR, und ich don ' T haben Standard-such-Feld angegeben ist, soweit ich weiß.Machen Sie sicher, dass Ihre Daten begangen wurde, bevor Sie versuchen, suchen Sie es mit der rechten?
Auch, wenn Sie wollen, speichern Sie raw-HTML-seine wahrscheinlich am besten, um tatsächlich entfernen Sie die HTML. Sie können dies tun, in Ihrer Anwendung oder Verwendung von Solr solr ist.HTMLStripWhitespaceTokenizerFactory, wie:
Dem Sie erklären in Ihrem fieldtype definition für "text". Möglicherweise möchten Sie erstellen eine neue Feld-Typ nur für den html-Code, vielleicht so etwas wie text_html und Sie können es verwenden, etwa so:
Ich bin nicht sicher, was du damit meinst:
Können Sie bitte erläutern?
fl
ist die Liste der von der Abfrage zurückgegebenen Felder..qf
ist die Liste, die Sie wollte, zu finden und es keine Unterstützung für wild cards..Der einzige Weg, um die Suche alle Felder, ohne sich Ihnen ein copyField, die fängt alle Werte (nicht gespeichert, nur indiziert), dann imitieren die Suche gegen alle Felder durch die Suche dagegen
In meinem schema.xml ich habe etwas wie den folgenden, die Kopie der Wert der einzelnen Felder enden mit _t in das Textfeld ein.
Den parameter
fl
hat nicht die Felder anzugeben, die Abfrage, aber die Felder zurück, die in der Reaktion.Könnte man nur hinzufügen
schema.xml
:Nun bei der Indizierung, wird jedes Feld kopiert
fieldContainingEverything
. Das problem hier ist, dass Sie den überblick verlieren Bereich den Inhalt kommt, wenn Sie wollen, um eine weitere Bewertung dieser Informationen. Ich würde mich freuen, wenn jemand hatte eine Idee, dass.Fand ich eine einigermaßen funktionierende Lösung:
Beschreiben das Szenario mit etwas mehr details: ich habe eine MySQL-Datenbank-Tabelle mit vielen Feldern zu indizieren, und so tun, indem Sie einfach zu importieren in jedes Feld ohne Angabe jedes Feld (
SELECT * FROM
...). Ich möchte die Abfrage den index für jedes Feld der Tabelle und wollen wissen, welches Feld verglichen die Abfrage. Ist dies nicht möglich out of the box, wie der highlighter nur sagt Sie, dass das Feld, die der Abfrage entsprechen, istfieldContainingEverything
. Durch die Verwendung dismax Abfrage-handler-ich fand, dass, obwohl es wird gesagt, die Suche in jedem Feld, ich weiß nicht scheinen, um es zu suchen, durch die Felder, die nicht angegeben sind in derqf
parameter. Die Idee ist nun, zusätzlich index jedes Feld hinzufügen:Ihrem
schema.xml
. Nun, wenn Sie query Solr via dismax mithl.true&hl.fl=*
fügen Sieqf=fieldContainingEverything^1
zu Ihrem parameterlist. Solr durchsucht jetzt alle indizierten Feld, aber auch highlights jedes Feld enthält den Suchbegriff. Nachteil dieser Methoden ist offensichtlich die erhöhte index Größe, die nicht sein sollte, dass die einschlägigen in den meisten Fällen, nehme ich an.