Solr
ÊÇÒ»Öֿɹ©ÆóҵʹÓõġ¢»ùÓÚ Lucene µÄËÑË÷·þÎñÆ÷£¬ËüÖ§³Ö²ãÃæËÑË÷¡¢ÃüÖÐÐÑÄ¿ÏÔʾºÍ¶àÖÖÊä³ö¸ñʽ¡£ÔÚÕâÆªÎÄÕÂÖУ¬½«½éÉÜ
Solr ²¢Õ¹Ê¾ÈçºÎÇáËɵؽ«Æä±íÏÖÓÅÒìµÄÈ«Îı¾ËÑË÷¹¦ÄܼÓÈëµ½ Web Ó¦ÓóÌÐòÖС£
¿ª·¢»·¾³£º
System£ºWindows
WebBrowser£ºIE6+¡¢Firefox3+
JDK£º1.6+
JavaEE Server£ºtomcat5.0.2.8¡¢tomcat6
IDE£ºeclipse¡¢MyEclipse 8
¿ª·¢ÒÀÀµ¿â£º
JavaEE 5¡¢solr 3.4
Ò»¡¢ÅäÖúͰ²×°solr
1¡¢ Ê×ÏÈÈ¥apache¹Ù·½ÍøÕ¾ÏÂÔØsolr£¬ÏÂÔØµØÖ·
http://labs.renren.com/apache-mirror//lucene/solr/3.4.0/
Ŀǰ×îеÄÊÇ3.4µÄ°æ±¾
2¡¢ ÏÂÔØºó½âѹĿ¼ÈçÏÂ

clientÊÇÒ»¸örubyʵÏÖµÄʾÀý£¬Õâ¸öÎÒÃÇÔÝʱ²»¹Ü
contribÓÐһЩ¹¦ÄÜÄ£¿éÊÇÐèÒªµÄjar°ü
distÊÇ´ò°ü·¢²¼ºÃµÄ¹¤³Ìwar°ü
docsÊǰïÖúÎĵµ
exampleÊÇʾÀý£¬ÀïÃæÓдò°ü²¿ÊðºÃµÄsolr¹¤³ÌʾÀýºÍservletÈÝÆ÷jetty¡£Èç¹ûÄãûÓÐtomcat¿ÉÒÔÖ±½ÓʹÓÃJetty·þÎñÆ÷²¿ÊðÄãµÄsolrʾÀý¡£
3¡¢ ·¢²¼¡¢²¿ÊðsolrʾÀý
A¡¢ ÀûÓÃ×Ô´øµÄJetty·þÎñÆ÷
Ê×ÏÈÔÚdosÃüÁîÖнøÈëµ½ÏÂÔØºÃµÄsolr½âѹµÄĿ¼apache-solr-3.4.0µÄexampleĿ¼
cd E:\JAR\solr\apache-solr-3.4.0\example
È»ºóÀûÓÃjavaÃüÁÆô¶¯jetty·þÎñÆ÷¡£Java ¨Cjar start.jar

Æô¶¯Jetty³É¹¦ºó£¬Èç¹ûûÓп´µ½´íÎóÏûÏ¢£¬Äã¿ÉÒÔ¿´µ½¶Ë¿ÚÐÅÏ¢¡£

Èç¹ûÄãµÄ¶Ë¿Ú³åÍ»ÁË£¬Äã¿ÉÒÔµ½½âѹµÄsolrʾÀý°üµÄexample/etcµÄjetty.xmlÖУ¬Ð޸Ķ˿ÚportÐÅÏ¢¡£
<Set name="port">
<SystemProperty name="jetty.port" default="8983"/>
</Set> |
B¡¢ ÀûÓÃtomcat·¢²¼solrʾÀý
½«ÏÂÔØµÄsolr½âѹºó£¬½øÈëapache-solr-3.4.0\distĿ¼£¬½«ÀïÃæµÄsolr.war·Åµ½D:\tomcat-6.0.28\webappsĿ¼Ï£¬Æô¶¯tomcat»á×Ô¶¯½âѹ¡££¨µ±È»£¬ÄãÒ²¿ÉÒÔÊÖ¶¯½âѹ·Åµ½wabappsĿ¼Ï£©
µ±È»ÄãÒ²¿ÉÒÔÉèÖÃcontextÖ¸ÏòÄãµÄsolr¹¤³Ì£¬ÔÚD:\tomcat-6.0.28\conf\Catalina\localhostĿ¼¼ÓÈësolr.xmlÅäÖã¬ÅäÖÃÈçÏ£º
<Context docBase="D:\solr.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="D:\solr" override="true" />
</Context> |
ÉÏÃæµÄ2²½¶¼ÊÇÒ»ÑùµÄ£¬ÕâÑù»¹Ã»ÓÐÍê¡£Æô¶¯ºóÄã¿ÉÄܻῴµ½ÈçÏ´íÎó£º

ÎÒÃÇÐèÒª½«Ò»Ð©ÅäÖúÍindex¿âÎļþÒ²·Åµ½½âѹºÃµÄsolr¹¤³ÌÏ¡£ÎÒÃǵ½½âѹµÄapache-solr-3.4.0\example\solrĿ¼Ï£¬½«ÀïÃæµÄconfºÍdataĿ¼copyµ½¸Õ²ÅÎÒÃDz¿ÊðµÄD:\tomcat-6.0.28\webapps\solr¹¤³ÌĿ¼Ï¡£»òÊÇcopyµ½ÄãµÄsolr.xmlÖеÄcontextÖ¸¶¨µÄ·¾¶Ï¹¤³ÌĿ¼ÖС£
ÖØÆôtomcat¾ÍokÁË¡£
4¡¢ Õâ¸öʱºòÄã¾Í¿ÉÒÔ·ÃÎÊhttp://localhost:8983/solr/admin/Äã¾Í¿ÉÒÔ¿´µ½ÈçϽçÃæ£º

ÔÚQuery StringÖÐÊäÈësolr£¬µã»÷Search¾Í¿ÉÒÔ²éѯµ½ÏàÓ¦µÄ½á¹û£¬½á¹ûÒÔxmlÐÎʽ·µ»Ø¡£µ±È»ÄãÒ²¿ÉÒÔÉèÖ÷µ»ØÊý¾ÝÀàÐÍΪjson¡£
¶þ¡¢SolrÀíÂÛ
1¡¢ solr»ù´¡
ÒòΪ Solr °ü×°²¢À©Õ¹ÁË Lucene£¬ËùÒÔËüÃÇʹÓúܶàÏàͬµÄÊõÓï¡£¸üÖØÒªµÄÊÇ£¬Solr ´´½¨µÄË÷ÒýÓë
Lucene ËÑË÷ÒýÇæ¿âÍêÈ«¼æÈÝ¡£Í¨¹ý¶Ô Solr ½øÐÐÊʵ±µÄÅäÖã¬Ä³Ð©Çé¿öÏ¿ÉÄÜÐèÒª½øÐбàÂ룬Solr
¿ÉÒÔÔĶÁºÍʹÓù¹½¨µ½ÆäËû Lucene Ó¦ÓóÌÐòÖеÄË÷Òý¡£
ÔÚ Solr ºÍ Lucene ÖУ¬Ê¹ÓÃÒ»¸ö»ò¶à¸ö Document À´¹¹½¨Ë÷Òý¡£Document
°üÀ¨Ò»¸ö»ò¶à¸ö Field¡£Field °üÀ¨Ãû³Æ¡¢ÄÚÈÝÒÔ¼°¸æËß Solr ÈçºÎ´¦ÀíÄÚÈݵÄÔªÊý¾Ý¡£ÀýÈ磬Field
¿ÉÒÔ°üº¬×Ö·û´®¡¢Êý×Ö¡¢²¼¶ûÖµ»òÕßÈÕÆÚ£¬Ò²¿ÉÒÔ°üº¬ÄãÏëÌí¼ÓµÄÈκÎÀàÐÍ£¬Ö»ÐèÓÃÔÚsolrµÄÅäÖÃÎļþÖнøÐÐÏàÓ¦µÄÅäÖü´¿É¡£Field
¿ÉÒÔʹÓôóÁ¿µÄÑ¡ÏîÀ´ÃèÊö£¬ÕâЩѡÏî¸æËß Solr ÔÚË÷ÒýºÍËÑË÷ÆÚ¼äÈçºÎ´¦ÀíÄÚÈÝ¡£ÏÖÔÚ£¬²é¿´Ò»Ï±í 1 ÖÐÁгöµÄÖØÒªÊôÐÔµÄ×Ó¼¯£º
2¡¢ solrË÷Òý²Ù×÷
ÔÚ Solr ÖУ¬Í¨¹ýÏò²¿ÊðÔÚ servlet ÈÝÆ÷ÖÐµÄ Solr Web Ó¦ÓóÌÐò·¢ËÍ HTTP ÇëÇóÀ´Æô¶¯Ë÷ÒýºÍËÑË÷¡£Solr
½ÓÊÜÇëÇó£¬È·¶¨ÒªÊ¹ÓõÄÊʵ± SolrRequestHandler£¬È»ºó´¦ÀíÇëÇó¡£Í¨¹ý HTTP ÒÔͬÑùµÄ·½Ê½·µ»ØÏìÓ¦¡£Ä¬ÈÏÅäÖ÷µ»Ø
Solr µÄ±ê×¼ XML ÏìÓ¦¡£ÄãÒ²¿ÉÒÔÅäÖà Solr µÄ±¸ÓÃÏìÓ¦¸ñʽ£¬Èçjson¡¢csv¸ñʽµÄÎı¾¡£
Ë÷Òý¾ÍÊǽÓÊÜÊäÈëÔªÊý¾Ý£¨Êý¾Ý¸ñʽÔÚschema.xmlÖнøÐÐÅäÖ㩲¢½«ËüÃÇ´«µÝ¸ø Solr£¬´Ó¶øÔÚ HTTP
Post XML ÏûÏ¢ÖнøÐÐË÷ÒýµÄ¹ý³Ì¡£Äã¿ÉÒÔÏò Solr Ë÷Òý servlet ´«µÝËĸö²»Í¬µÄË÷ÒýÇëÇó£º
add/update ÔÊÐíÄúÏò Solr Ìí¼ÓÎĵµ»ò¸üÐÂÎĵµ¡£Ö±µ½Ìá½»ºó²ÅÄÜËÑË÷µ½ÕâЩÌí¼ÓºÍ¸üС£
commit ¸æËß Solr£¬Ó¦¸ÃʹÉÏ´ÎÌá½»ÒÔÀ´Ëù×öµÄËùÓиü¸Ä¶¼¿ÉÒÔËÑË÷µ½¡£
optimize ÖØ¹¹ Lucene µÄÎļþÒԸĽøËÑË÷ÐÔÄÜ¡£Ë÷ÒýÍê³ÉºóÖ´ÐÐÒ»ÏÂÓÅ»¯Í¨³£±È½ÏºÃ¡£Èç¹û¸üÐÂ±È½ÏÆµ·±£¬ÔòÓ¦¸ÃÔÚʹÓÃÂʽϵ͵Äʱºò°²ÅÅÓÅ»¯¡£Ò»¸öË÷ÒýÎÞÐèÓÅ»¯Ò²¿ÉÒÔÕý³£µØÔËÐС£ÓÅ»¯ÊÇÒ»¸öºÄʱ½Ï¶àµÄ¹ý³Ì¡£
delete ¿ÉÒÔͨ¹ý id »ò²éѯÀ´Ö¸¶¨¡£°´ id ɾ³ý½«É¾³ý¾ßÓÐÖ¸¶¨ id µÄÎĵµ£»°´²éѯɾ³ý½«É¾³ý²éѯ·µ»ØµÄËùÓÐÎĵµ¡£
LuceneÖвÙ×÷Ë÷ÒýÒ²ÓÐÕ⼸¸ö²½Ö裬µ«ÊÇûÓиüС£Lucene¸üÐÂÊÇÏÈɾ³ý£¬È»ºóÌí¼ÓË÷Òý¡£ÒòΪ¸üÐÂË÷ÒýÔÚÒ»¶¨Çé¿öÏ£¬Ð§ÂÊûÓÐÏÈɾ³ýºóÌí¼ÓµÄЧÂʺá£
3¡¢ ËÑË÷
Ìí¼ÓÎĵµºó£¬¾Í¿ÉÒÔËÑË÷ÕâЩÎĵµÁË¡£Solr ½ÓÊÜ HTTP GET ºÍ HTTP POST ²éѯÏûÏ¢¡£ÊÕµ½µÄ²éѯÓÉÏàÓ¦µÄ
SolrRequestHandler ½øÐд¦Àí¡£
solr²éѯ²ÎÊýÃèÊö£º

4¡¢ solrģʽ
ÉÏÃæÓÐÌáµ½schema.xmlÕâ¸öÅäÖã¬Õâ¸öÅäÖÿÉÒÔÔÚÄãÏÂÔØsolr°üµÄ°²×°½âѹĿ¼µÄapache-solr-3.4.0\example\solr\confÖÐÕÒµ½£¬Ëü¾ÍÊÇsolrģʽ¹ØÁªµÄÎļþ¡£´ò¿ªÕâ¸öÅäÖÃÎļþ£¬Äã»á·¢ÏÖÓÐÏêϸµÄ×¢ÊÍ¡£
ģʽ×éÖ¯Ö÷Òª·ÖΪÈý¸öÖØÒªÅäÖÃ
types ²¿·ÖÊÇһЩ³£¼ûµÄ¿ÉÖØÓö¨Ò壬¶¨ÒåÁË Solr£¨ºÍ Lucene£©ÈçºÎ´¦Àí Field¡£Ò²¾ÍÊÇÌí¼Óµ½Ë÷ÒýÖеÄxmlÎļþÊôÐÔÖеÄÀàÐÍ£¬Èçint¡¢text¡¢dateµÈ
filedsÊÇÄãÌí¼Óµ½Ë÷ÒýÎļþÖгöÏÖµÄÊôÐÔÃû³Æ£¬¶øÉùÃ÷ÀàÐ;ÍÐèÒªÓõ½ÉÏÃæµÄtypes
ÆäËûÅäÖÃÓÐ
uniqueKey Ψһ¼ü£¬ÕâÀïÅäÖõÄÊÇÉÏÃæ³öÏÖµÄfileds£¬Ò»°ãÊÇid¡¢urlµÈ²»Öظ´µÄ¡£ÔÚ¸üС¢É¾³ýµÄʱºò¿ÉÒÔÓõ½¡£
defaultSearchFieldĬÈÏËÑË÷ÊôÐÔ£¬Èçq=solr¾ÍÊÇĬÈϵÄËÑË÷ÄǸö×Ö¶Î
solrQueryParser²éѯת»»Ä£Ê½£¬ÊDz¢ÇÒ»¹ÊÇ»òÕߣ¨and/or£©
schemaÅäÖÃÀàÐÍ
<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" /> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" /> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> </analyzer> </fieldType>
|
ÉÏÃæ¾ÍÊÇÒ»¸ötypeÁË£¬È»ºóÄãÔÚfieldsÅäÖÃfieldµÄʱºò¾Í¿ÉÒÔÓÃÕâ¸ötype¡£
Ê×ÏÈ£¬ÉÏÃæµÄfieldTypeµÄÅäÖÃÖÐÓÐÁ½¸öanalyzer£¬ËüÊÇ·Ö´ÊÆ÷¡£Ö÷Òª°ÑÎÒÃǵÄÊý¾Ý½øÐзָî³ÉÒ»¸ö¸öµÄ´ÊÓï¡£´Ê¸ÉÌáÈ¡¡¢Í£Ö¹´Êɾ³ýÒÔ¼°ÏàËÆµÄ²Ù×÷¶¼±»Ó¦ÓÃÓÚ±ê¼Ç£¬È»ºó²Å½øÐÐË÷ÒýºÍËÑË÷£¬µ¼ÖÂʹÓÃÏàͬÀàÐ͵ıê¼Ç¡£
ÉÏÃæµÄÓ¦ÓóÌÐòµÄ Solr µÄfieldTypeÅäÖð´ÒÔϲ½Öè½øÐÐÉèÖãº
¸ù¾Ý¿Õ°×½øÐжϴʣ¬È»ºóɾ³ýËùÓеĹ«¹²´Ê£¨StopFilterFactory£©
ʹÓÃÆÆÕۺŴ¦ÀíÌØÊâµÄ´óСд¡¢´óСдת»»µÈµÈ¡££¨WordDelimiterFilterFactory£©£»½«ËùÓÐÌõÄ¿´¦ÀíΪСд£¨LowerCaseFilterFactory£©
ʹÓà Porter Stemming Ëã·¨½øÐдʸÉÌáÈ¡£¨EnglishPorterFilterFactory£©
ɾ³ýËùÓеĸ±±¾£¨RemoveDuplicatesTokenFilterFactory£©
SchemaÊôÐÔ¡¢×Ö¶Î
<field name="id" type="string" indexed="true" stored="true" required="true" /> <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true" /> <field name="name" type="text_general" indexed="true" stored="true" /> <field name="alphaNameSort" type="alphaOnlySort" indexed="true" stored="false" /> <field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true" /> <field name="cat" type="string" indexed="true" stored="true" multiValued="true" /> <field name="features" type="text_general" indexed="true" stored="true" multiValued="true" /> <field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
|
ÊôÐÔÊÇÔÚÌí¼ÓË÷Òý¡¢²éѯµÄʱºò±ØÐëµÄÅäÖã¬Èç¹ûÄã²»¼ÓÕâЩÅäÖá£ÊÇÎÞ·¨Íê³ÉË÷ÒýµÄ´´½¨µÄ¡£
Ê×ÏÈidÊôÐÔÊÇδ¾·ÖÎöµÄ×Ö·û´®ÀàÐÍ£¬ÊÇ¿ÉÒÔË÷Òý¡¢´æ´¢µÄ£¬²¢ÇÒÊÇΨһµÄ¡£
skuÊÇÒ»¸ö¾¹ý·Ö´ÊÆ÷·ÖÎö³öÀ´µÄÓ¢ÎÄÇиîµÄÀàÐÍ×Ö·û£¬¿ÉÒÔË÷Òý¡¢´æ´¢¡¢²»Òª´æ´¢¹æ·¶
multiValued ÊôÐÔÊÇÒ»¸öÌØÊâµÄÀý×Ó£¬Ö¸ Document ¿ÉÒÔÓµÓÐÒ»¸öÏàͬÃû³ÆÌí¼ÓÁ˶à´ÎµÄ
Field¡£
omitNorms ÊôÐÔ¸æËß Solr£¨ºÍ Lucene£©²»Òª´æ´¢¹æ·¶¡£
½éÉÜÒ»ÏÂ×Ö¶ÎÉùÃ÷Ï·½µÄ <dynamicField> ÉùÃ÷¡£¶¯Ì¬×Ö¶ÎÊÇÒ»Ð©ÌØÊâÀàÐ͵Ä×ֶΣ¬¿ÉÒÔÔÚÈκÎʱºò½«ÕâЩ×Ö¶ÎÌí¼Óµ½ÈκÎÎĵµÖУ¬ÓÉ×Ö¶ÎÉùÃ÷¶¨ÒåËüÃǵÄÊôÐÔ¡£¶¯Ì¬×Ö¶ÎºÍÆÕͨ×Ö¶ÎÖ®¼äµÄ¹Ø¼üÇø±ðÔÚÓÚǰÕß²»ÐèÒªÔÚ
schema.xml ÖÐÌáǰÉùÃ÷Ãû³Æ¡£Solr ½«Ãû³ÆÉùÃ÷ÖÐµÄ glob-like ģʽӦÓõ½ËùÓÐÉÐδÉùÃ÷µÄÒýÈëµÄ×Ö¶ÎÃû³Æ£¬²¢¸ù¾ÝÆä
<dynamicField> ÉùÃ÷¶¨ÒåµÄÓïÒåÀ´´¦Àí×ֶΡ£ÀýÈ磬<dynamicField
name="*_i" type="sint" indexed="true"
stored="true"/> Ö¸Ò»¸ö myRating_i ×ֶα» Solr
´¦ÀíΪ sint£¬¾¡¹Ü²¢Î´½«ÆäÉùÃ÷Ϊ×ֶΡ£ÕâÖÖ´¦Àí±È½Ï·½±ã£¬ÀýÈ磬µ±ÐèÒªÓû§¶¨Òå´ýËÑË÷ÄÚÈݵÄʱºò¡£
5¡¢ Ë÷ÒýÅäÖÃ
Solr ÐÔÄÜÒòËØ£¬À´Á˽âÓë¸÷ÖÖ¸ü¸ÄÏà¹ØµÄÐÔÄÜȨºâ¡£
±í 1 ¸ÅÀ¨Á˿ɿØÖÆ Solr Ë÷Òý´¦ÀíµÄ¸÷ÖÖÒòËØ£º

6¡¢ ²éѯ´¦ÀíÅäÖÃ
<maxBooleanClauses> ±ê¼Ç¶¨ÒåÁË¿É×éºÏÔÚÒ»ÆðÐγÉÒ»¸ö²éѯµÄ×Ó¾äÊýÁ¿µÄÉÏÏÞ¡£¶ÔÓÚ´ó¶àÊýÓ¦ÓóÌÐò¶øÑÔ£¬Ä¬ÈϵÄ
1024 ¾ÍÓ¦¸ÃÒѾ×ã¹»£»È»¶ø£¬Èç¹ûÓ¦ÓóÌÐò´óÁ¿Ê¹ÓÃÁËͨÅä·û»ò·¶Î§²éѯ£¬Ôö¼ÓÕâ¸öÏÞÖµ½«ÄܱÜÃâµ±Öµ³¬³öʱ£¬Å׳ö
TooManyClausesException¡£
ÈôÓ¦ÓóÌÐòÔ¤ÆÚÖ»»á¼ìË÷ Document ÉÏÉÙÊý¼¸¸ö Field£¬ÄÇô¿ÉÒÔ½« <enableLazyFieldLoading>
ÊôÐÔÉèÖÃΪ true¡£ÀÁÉ¢¼ÓÔØµÄÒ»¸ö³£¼û³¡¾°´ó¶¼·¢ÉúÔÚÓ¦ÓóÌÐò·µ»ØºÍÏÔʾһϵÁÐËÑË÷½á¹ûµÄʱºò£¬Óû§³£³£»áµ¥»÷ÆäÖеÄÒ»¸öÀ´²é¿´´æ´¢ÔÚ´ËË÷ÒýÖеÄÔʼÎĵµ¡£³õʼµÄÏÔʾ³£³£Ö»ÐèÒªÏÔʾºÜ¶ÌµÄÒ»¶ÎÐÅÏ¢¡£Èô¿¼Âǵ½¼ìË÷´óÐÍ
Document µÄ´ú¼Û£¬³ý·Ç±ØÐ裬·ñÔò¾ÍÓ¦¸Ã±ÜÃâ¼ÓÔØÕû¸öÎĵµ¡£
<query> ²¿·Ö¸ºÔð¶¨ÒåÓëÔÚ Solr Öз¢ÉúµÄʼþÏà¹ØµÄ¼¸¸öÑ¡Ïî¡£Searcher
µÄ Java ÀàÀ´´¦Àí Query ʵÀý¡£Òª¸Ä½øÕâÒ»Éè¼ÆºÍÏÔÖøÌá¸ßÐÔÄÜ£¬°ÑÕâЩÐ嵀 Searcher Áª»úÒÔ±ãΪÏÖ³¡Óû§Ìṩ²éѯ·þÎñ֮ǰ£¬ÏȶÔËüÃǽøÐÐ
¡°ÈÈÉí¡±¡£<query> ²¿·ÖÖÐµÄ <listener> Ñ¡ÏÒå newSearcher
ºÍ firstSearcher ʼþ£¬Äú¿ÉÒÔʹÓÃÕâЩʼþÀ´Ö¸¶¨ÊµÀý»¯ÐÂËÑË÷³ÌÐò»òµÚÒ»¸öËÑË÷³ÌÐòʱӦ¸ÃÖ´ÐÐÄÄЩ²éѯ¡£Èç¹ûÓ¦ÓóÌÐòÆÚÍûÇëÇóÄ³Ð©ÌØ¶¨µÄ²éѯ£¬ÄÇôÔÚ´´½¨ÐÂËÑË÷³ÌÐò»òµÚÒ»¸öËÑË÷³ÌÐòʱ¾ÍÓ¦¸Ã·´×¢ÊÍÕâЩ²¿·Ö²¢Ö´ÐÐÊʵ±µÄ²éѯ¡£
solrconfig.xml ÎļþµÄÊ£Óಿ·Ö£¬³ý <admin>
Ö®Í⣬º¸ÇÁËÓë »º´æ¡¢¸´ÖÆ ºÍ À©Õ¹»ò¶¨ÖÆ Solr ÓйصÄÏîÄ¿¡£admin ²¿·ÖÈÃÄú¿ÉÒÔ¶¨ÖƹÜÀí½çÃæ¡£ÓйØÅäÖÃ
admin ½ÚµÄ¸ü¶àÐÅÏ¢£¬Çë²Î¿´solrconfig.xml ÎļþÖеÄ×¢ÊÍ¡£
7¡¢ ¼àÊÓ¡¢¼Ç¼ºÍͳ¼ÆÊý¾Ý
ÓÃÓÚ¼àÊÓ¡¢¼Ç¼ºÍͳ¼ÆÊý¾ÝµÄ Solr ¹ÜÀíÑ¡Ïî

8¡¢ ÖÇÄÜ»º´æ
ÖÇÄÜ»º´æÊÇÈà Solr µÃÒÔ³ÉΪÒýÈËÖõÄ¿µÄËÑË÷·þÎñÆ÷µÄÒ»¸ö¹Ø¼üÐÔÄÜÌØÕ÷¡£Solr
ÌṩÁËËÄÖÖ²»Í¬µÄ»º´æÀàÐÍ£¬ËùÓÐËÄÖÖÀàÐͶ¼¿ÉÔÚ solrconfig.xml µÄ <query>
²¿·ÖÖÐÅäÖá£solrconfig.xml ÎļþÖÐËùÓõıê¼ÇÃûÁгöÁËÕâЩ»º´æÀàÐÍ£º

ÿ¸ö»º´æÉùÃ÷¶¼½ÓÊÜ×î¶àËĸöÊôÐÔ£º
class ÊÇ»º´æÊµÏÖµÄ Java Ãû¡£
size ÊÇ×î´óµÄÌõÄ¿Êý¡£
initialSize ÊÇ»º´æµÄ³õʼ´óС¡£
autoWarmCount ÊÇÈ¡×Ծɻº´æÒÔÔ¤ÈÈлº´æµÄÌõÄ¿Êý¡£Èç¹ûÌõÄ¿ºÜ¶à£¬¾ÍÒâζ×Å»º´æµÄ
hit »á¸ü¶à£¬Ö»²»¹ýÐèÒª»¨¸ü³¤µÄÔ¤ÈÈʱ¼ä¡£
Èý¡¢ÀûÓÃSolrJ²Ù×÷solr API£¬Íê³Éindex²Ù×÷
ʹÓÃSolrJ²Ù×÷Solr»á±ÈÀûÓÃhttpClientÀ´²Ù×÷SolrÒª¼òµ¥¡£SolrJÊÇ·â×°ÁËhttpClient·½·¨£¬À´²Ù×÷solrµÄAPIµÄ¡£SolrJµ×²ã»¹ÊÇͨ¹ýʹÓÃhttpClientÖеķ½·¨À´Íê³ÉSolrµÄ²Ù×÷¡£
1¡¢ Ê×ÏÈ£¬ÄãÐèÒªÌí¼ÓÈçÏÂjar°ü

ÆäÖÐapache-solr-solrj-3.4.0.jar¡¢slf4j-api-1.6.1.jar¿ÉÒÔÔÚÏÂÔØµÄapache-solr-3.4.0µÄѹËõ°üÖеÄdistÖÐÄÜÕÒµ½¡£
2¡¢ Æä´Î£¬½¨Á¢Ò»¸ö¼òµ¥µÄ²âÊÔÀ࣬Íê³ÉServer¶ÔÏóµÄÏà¹Ø·½·¨µÄ²âÊÔ¹¤×÷£¬´úÂëÈçÏ£º
package com.hoo.test; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.params.SolrParams; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.hoo.entity.Index; /** * <b>function:</b> Server TestCase * @author hoojo * @createDate 2011-10-19 ÏÂÎç01:49:07 * @file ServerTest.java * @package com.hoo.test * @project SolrExample * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class ServerTest { private SolrServer server; private CommonsHttpSolrServer httpServer; private static final String DEFAULT_URL = "http://localhost:8983/solr/"; @Before public void init() { try { server = new CommonsHttpSolrServer(DEFAULT_URL); httpServer = new CommonsHttpSolrServer(DEFAULT_URL); } catch (MalformedURLException e) { e.printStackTrace(); } } @After public void destory() { server = null; httpServer = null; System.runFinalization(); System.gc(); } public final void fail(Object o) { System.out.println(o); } /** * <b>function:</b> ²âÊÔÊÇ·ñ´´½¨server¶ÔÏó³É¹¦ * @author hoojo * @createDate 2011-10-21 ÉÏÎç09:48:18 */ @Test public void server() { fail(server); fail(httpServer); } /** * <b>function:</b> ¸ù¾Ýquery²ÎÊý²éѯË÷Òý * @author hoojo * @createDate 2011-10-21 ÉÏÎç10:06:39 * @param query */ public void query(String query) { SolrParams params = new SolrQuery(query); try { QueryResponse response = server.query(params); SolrDocumentList list = response.getResults(); for (int i = 0; i < list.size(); i++) { fail(list.get(i)); } } catch (SolrServerException e) { e.printStackTrace(); } } }
|
²âÊÔÔËÐÐserver case·½·¨£¬Èç¹û³É¹¦´´½¨¶ÔÏó£¬ÄÇÄã¾Í³É¹¦µÄÁ´½Óµ½¡£
×¢Ò⣺ÔÚÔËÐб¾·½·¨Ö®Ç°£¬ÇëÆô¶¯ÄãµÄsolr¹Ù·½×Ô¶¯µÄÏîÄ¿¡£http://localhost:8983/solr/±£Ö¤Äܹ»³É¹¦·ÃÎÊÕâ¸ö¹¤³Ì¡£ÒòΪ½ÓÏÂÀ´µÄËùÓй¤×÷¶¼ÊÇÎ§ÈÆÕâ¸ösolr¹¤³ÌÍê³ÉµÄ¡£Èç¹ûÄãÏÖÔÚ»¹²»ÖªµÀ£¬Ôõô²¿Êð¡¢·¢²¼¹Ù·½solr¹¤³Ì£¬Çë²Î¿¼Ç°ÃæµÄ¾ßÌåÕ½ڡ£
3¡¢ ServerµÄÓйØÅäÖÃÑ¡Ïî²ÎÊý£¬serverÊÇCommonsHttpSolrServerµÄʵÀý
server.setSoTimeout(1000); // socket read timeout server.setConnectionTimeout(100); server.setDefaultMaxConnectionsPerHost(100); server.setMaxTotalConnections(100); server.setFollowRedirects(false); // defaults to false // allowCompression defaults to false. // Server side must support gzip or deflate for this to have any effect. server.setAllowCompression(true); server.setMaxRetries(1); // defaults to 0. > 1 not recommended. //sorlr J ĿǰʹÓöþ½øÖƵĸñʽ×÷ΪĬÈϵĸñʽ¡£¶ÔÓÚsolr1.2µÄÓû§Í¨¹ýÏÔʾµÄÉèÖòÅÄÜʹÓÃXML¸ñʽ¡£ server.setParser(new XMLResponseParser()); //¶þ½øÖÆÁ÷Êä³ö¸ñʽ //server.setRequestWriter(new BinaryRequestWriter());
|
4¡¢ ÀûÓÃSolrJÍê³ÉIndex DocumentµÄÌí¼Ó²Ù×÷
/** * <b>function:</b> Ìí¼ÓdocÎĵµ * @author hoojo * @createDate 2011-10-21 ÉÏÎç09:49:10 */ @Test public void addDoc() { //´´½¨docÎĵµ SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", 1); doc.addField("name", "Solr Input Document"); doc.addField("manu", "this is SolrInputDocument content"); try { //Ìí¼ÓÒ»¸ödocÎĵµ UpdateResponse response = server.add(doc); fail(server.commit());//commitºó²Å±£´æµ½Ë÷Òý¿â fail(response); fail("query time£º" + response.getQTime()); fail("Elapsed Time£º" + response.getElapsedTime()); fail("status£º" + response.getStatus()); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } query("name:solr"); }
|
ÔÚapache-solr-3.4.0\example\solr\confĿ¼ÏµÄschema.xmlÖпÉÒÔÕÒµ½ÓйØÓÚfieldÊôÐÔµÄÅäÖã¬schema.xmlÖеÄfield¾ÍºÍÉÏÃæDocumentÎĵµÖеÄfield£¨id¡¢name¡¢manu£©¶ÔÓ¦¡£Èç¹û³öÏÖERROR:unknown
field 'xxxx'¾Í±íʾÄãÉèÖõÄÕâ¸öfieldÔÚschema.xmlÖв»´æÔÚ¡£Èç¹ûÒ»¶¨ÒªÊ¹ÓÃÕâ¸öfield£¬ÇëÄãÔÚschema.xmlÖнøÐÐfiledÔªËØµÄÅäÖ᣾ßÌåÇë²Î¿¼Ç°ÃæµÄÕ½ڡ£
×¢Ò⣺ÔÚschema.xmlÖÐÅäÖÃÁËuniqueKeyΪid£¬¾Í±íʾidÊÇΨһµÄ¡£Èç¹ûÔÚÌí¼ÓDocumentµÄʱºò£¬idÖØ¸´Ìí¼Ó¡£ÄÇôºóÃæÌí¼ÓµÄÏàͬidµÄdoc»á¸²¸ÇÇ°ÃæµÄdoc£¬ÀàËÆÓÚupdate¸üвÙ×÷£¬¶ø²»»á³öÏÖÖØ¸´µÄÊý¾Ý¡£
5¡¢ ÀûÓÃSolrJÌí¼Ó¶à¸öDocument£¬¼´Ìí¼ÓÎĵµ¼¯ºÏ
/** * <b>function:</b> Ìí¼ÓdocsÎĵµ¼¯ºÏ * @author hoojo * @createDate 2011-10-21 ÉÏÎç09:55:01 */ @Test public void addDocs() { Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", 2); doc.addField("name", "Solr Input Documents 1"); doc.addField("manu", "this is SolrInputDocuments 1 content"); docs.add(doc); doc = new SolrInputDocument(); doc.addField("id", 3); doc.addField("name", "Solr Input Documents 2"); doc.addField("manu", "this is SolrInputDocuments 3 content"); docs.add(doc); try { //add docs UpdateResponse response = server.add(docs); //commitºó²Å±£´æµ½Ë÷Òý¿â fail(server.commit()); fail(response); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } query("solr"); }
|
¾ÍÊÇÌí¼ÓÒ»¸öList¼¯ºÏ
6¡¢ Ìí¼ÓJavaEntity Bean£¬Õâ¸öÐèÒªÏÈ´´½¨Ò»¸öJavaBean£¬È»ºóÀ´Íê³ÉÌí¼Ó²Ù×÷£»
JavaBean£ºIndexµÄ´úÂë
/** * <b>function:</b> JavaEntity Bean£»IndexÐèÒªÌí¼ÓÏà¹ØµÄAnnotation×¢½â£¬±ãÓÚ¸æËßsolrÄÄЩÊôÐÔ²ÎÓëµ½indexÖÐ * @author hoojo * @createDate 2011-10-19 ÏÂÎç05:33:27 * @file Index.java * @package com.hoo.entity * @project SolrExample * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class Index { //@Field setter·½·¨ÉÏÌí¼ÓAnnotationÒ²ÊÇ¿ÉÒ﵀ private String id; @Field private String name; @Field private String manu; @Field private String[] cat; @Field private String[] features; @Field private float price; @Field private int popularity; @Field private boolean inStock; public String getId() { return id; } @Field public void setId(String id) { this.id = id; } //getter¡¢setter·½·¨ public String toString() { return this.id + "#" + this.name + "#" + this.manu + "#" + this.cat; } }
|
×¢ÒâÉÏÃæµÄÊôÐÔÊǺÍÔÚapache-solr-3.4.0\example\solr\confĿ¼ÏµÄschema.xmlÖпÉÒÔÕÒµ½ÓйØÓÚfieldÊôÐÔµÄÅäÖöÔÓ¦µÄ¡£Èç¹ûÄãIndex
JavaBeanÖгöÏÖµÄÊôÐÔÔÚschema.xmlµÄfieldÅäÖÃÎÞ·¨ÕÒµ½£¬ÄÇô³ö³öÏÖunknown filed´íÎó¡£
Ìí¼ÓBeanÍê³ÉdocÌí¼Ó²Ù×÷
/** * <b>function:</b> Ìí¼ÓJavaEntity Bean * @author hoojo * @createDate 2011-10-21 ÉÏÎç09:55:37 */ @Test public void addBean() { //IndexÐèÒªÌí¼ÓÏà¹ØµÄAnnotation×¢½â£¬±ãÓÚ¸æËßsolrÄÄЩÊôÐÔ²ÎÓëµ½indexÖÐ Index index = new Index(); index.setId("4"); index.setName("add bean index"); index.setManu("index bean manu"); index.setCat(new String[] { "a1", "b2" }); try { //Ìí¼ÓIndex Beanµ½Ë÷Òý¿â UpdateResponse response = server.addBean(index); fail(server.commit());//commitºó²Å±£´æµ½Ë÷Òý¿â fail(response); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } queryAll(); }
|
7¡¢ Ìí¼ÓBean¼¯ºÏ
/** * <b>function:</b> Ìí¼ÓEntity Bean¼¯ºÏµ½Ë÷Òý¿â * @author hoojo * @createDate 2011-10-21 ÉÏÎç10:00:55 */ @Test public void addBeans() { Index index = new Index(); index.setId("6"); index.setName("add beans index 1"); index.setManu("index beans manu 1"); index.setCat(new String[] { "a", "b" }); List<Index> indexs = new ArrayList<Index>(); indexs.add(index); index = new Index(); index.setId("5"); index.setName("add beans index 2"); index.setManu("index beans manu 2"); index.setCat(new String[] { "aaa", "bbbb" }); indexs.add(index); try { //Ìí¼ÓË÷Òý¿â UpdateResponse response = server.addBeans(indexs); fail(server.commit());//commitºó²Å±£´æµ½Ë÷Òý¿â fail(response); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } queryAll(); }
|
8¡¢ ɾ³ýË÷ÒýDocument
/** * <b>function:</b> ɾ³ýË÷Òý²Ù×÷ * @author hoojo * @createDate 2011-10-21 ÉÏÎç10:04:28 */ @Test public void remove() { try { //ɾ³ýidΪ1µÄË÷Òý server.deleteById("1"); server.commit(); query("id:1"); //¸ù¾Ýid¼¯ºÏ£¬É¾³ý¶à¸öË÷Òý List<String> ids = new ArrayList<String>(); ids.add("2"); ids.add("3"); server.deleteById(ids); server.commit(true, true); query("id:3 id:2"); //ɾ³ý²éѯµ½µÄË÷ÒýÐÅÏ¢ server.deleteByQuery("id:4 id:6"); server.commit(true, true); queryAll(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
|
9¡¢ ²éѯË÷Òý
/** * <b>function:</b> ²éѯËùÓÐË÷ÒýÐÅÏ¢ * @author hoojo * @createDate 2011-10-21 ÉÏÎç10:05:38 */ @Test public void queryAll() { ModifiableSolrParams params = new ModifiableSolrParams(); // ²éѯ¹Ø¼ü´Ê£¬*:*´ú±íËùÓÐÊôÐÔ¡¢ËùÓÐÖµ£¬¼´ËùÓÐindex params.set("q", "*:*"); // ·ÖÒ³£¬start=0¾ÍÊÇ´Ó0¿ªÊ¼£¬£¬rows=5µ±Ç°·µ»Ø5Ìõ¼Ç¼£¬µÚ¶þÒ³¾ÍÊDZ仯startÕâ¸öֵΪ5¾Í¿ÉÒÔÁË¡£ params.set("start", 0); params.set("rows", Integer.MAX_VALUE); // ÅÅÐò£¬£¬Èç¹û°´ÕÕid ÅÅÐò£¬£¬ÄÇô½«score desc ¸Ä³É id desc(or asc) params.set("sort", "score desc"); // ·µ»ØÐÅÏ¢ * Ϊȫ²¿ ÕâÀïÊÇÈ«²¿¼ÓÉÏscore£¬Èç¹û²»¼ÓÏÂÃæ¾Í²»ÄÜʹÓÃscore params.set("fl", "*,score"); try { QueryResponse response = server.query(params); SolrDocumentList list = response.getResults(); for (int i = 0; i < list.size(); i++) { fail(list.get(i)); } } catch (SolrServerException e) { e.printStackTrace(); } }
|
10¡¢ ÆäËûºÍServerÓйط½·¨
/** * <b>function:</b> ÆäËûserverÏà¹Ø·½·¨²âÊÔ * @author hoojo * @createDate 2011-10-21 ÉÏÎç10:02:03 */ @Test public void otherMethod() { fail(server.getBinder()); try { fail(server.optimize());//ºÏ²¢Ë÷ÒýÎļþ£¬¿ÉÒÔÓÅ»¯Ë÷Òý¡¢ÌṩÐÔÄÜ£¬µ«ÐèÒªÒ»¶¨µÄʱ¼ä fail(server.ping());//ping·þÎñÆ÷ÊÇ·ñÁ¬½Ó³É¹¦ Index index = new Index(); index.setId("299"); index.setName("add bean index199"); index.setManu("index bean manu199"); index.setCat(new String[] { "a199", "b199" }); UpdateResponse response = server.addBean(index); fail("response: " + response); queryAll(); //»Ø¹öµô֮ǰµÄ²Ù×÷£¬rollback addBean operation fail("rollback: " + server.rollback()); //Ìá½»²Ù×÷£¬Ìá½»ºóÎÞ·¨»Ø¹ö֮ǰ²Ù×÷£»·¢ÏÖaddBeanûÓгɹ¦Ìí¼ÓË÷Òý fail("commit: " + server.commit()); queryAll(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
|
11¡¢ Îĵµ²éѯ
/** * <b>function:</b> query »ù±¾Ó÷¨²âÊÔ * @author hoojo * @createDate 2011-10-20 ÏÂÎç04:44:28 */ @Test public void queryCase() { //AND ²¢ÇÒ SolrQuery params = new SolrQuery("name:apple AND manu:inc"); //OR »òÕß params.setQuery("name:apple OR manu:apache"); //¿Õ¸ñ µÈͬÓÚ OR params.setQuery("name:server manu:dell"); //params.setQuery("name:solr - manu:inc"); //params.setQuery("name:server + manu:dell"); //²éѯname°üº¬solr apple params.setQuery("name:solr,apple"); //manu²»°üº¬inc params.setQuery("name:solr,apple NOT manu:inc"); //50 <= price <= 200 params.setQuery("price:[50 TO 200]"); params.setQuery("popularity:[5 TO 6]"); //params.setQuery("price:[50 TO 200] - popularity:[5 TO 6]"); //params.setQuery("price:[50 TO 200] + popularity:[5 TO 6]"); //50 <= price <= 200 AND 5 <= popularity <= 6 params.setQuery("price:[50 TO 200] AND popularity:[5 TO 6]"); params.setQuery("price:[50 TO 200] OR popularity:[5 TO 6]"); //¹ýÂËÆ÷²éѯ£¬¿ÉÒÔÌá¸ßÐÔÄÜ filter ÀàËÆ¶à¸öÌõ¼þ×éºÏ£¬Èçand //params.addFilterQuery("id:VA902B"); //params.addFilterQuery("price:[50 TO 200]"); //params.addFilterQuery("popularity:[* TO 5]"); //params.addFilterQuery("weight:*"); //0 < popularity < 6 ûÓеÈÓÚ //params.addFilterQuery("popularity:{0 TO 6}"); //ÅÅÐò params.addSortField("id", ORDER.asc); //·ÖÒ³£ºstart¿ªÊ¼Ò³£¬rowsÿҳÏÔʾ¼Ç¼ÌõÊý //params.add("start", "0"); //params.add("rows", "200"); //params.setStart(0); //params.setRows(200); //ÉèÖøßÁÁ params.setHighlight(true); // ¿ªÆô¸ßÁÁ×é¼þ params.addHighlightField("name");// ¸ßÁÁ×Ö¶Î params.setHighlightSimplePre("<font color='red'>");//±ê¼Ç£¬¸ßÁÁ¹Ø¼ü×Öǰ׺ params.setHighlightSimplePost("</font>");//ºó׺ params.setHighlightSnippets(1);//½á¹û·ÖƬÊý£¬Ä¬ÈÏΪ1 params.setHighlightFragsize(1000);//ÿ¸ö·ÖƬµÄ×î´ó³¤¶È£¬Ä¬ÈÏΪ100 //·ÖƬÐÅÏ¢ params.setFacet(true) .setFacetMinCount(1) .setFacetLimit(5)//¶Î .addFacetField("name")//·ÖƬ×Ö¶Î .addFacetField("inStock"); //params.setQueryType(""); try { QueryResponse response = server.query(params); /*List<Index> indexs = response.getBeans(Index.class); for (int i = 0; i < indexs.size(); i++) { fail(indexs.get(i)); }*/ //Êä³ö²éѯ½á¹û¼¯ SolrDocumentList list = response.getResults(); fail("query result nums: " + list.getNumFound()); for (int i = 0; i < list.size(); i++) { fail(list.get(i)); } //Êä³ö·ÖƬÐÅÏ¢ List<FacetField> facets = response.getFacetFields(); for (FacetField facet : facets) { fail(facet); List<Count> facetCounts = facet.getValues(); for (FacetField.Count count : facetCounts) { System.out.println(count.getName() + ": " + count.getCount()); } } } catch (SolrServerException e) { e.printStackTrace(); } }
|
12¡¢ ·ÖƬ²éѯ¡¢Í³¼Æ
/** * <b>function:</b> ·ÖƬ²éѯ£¬ ¿ÉÒÔͳ¼Æ¹Ø¼ü×Ö¼°³öÏֵĴÎÊý¡¢»òÊÇ×ö×Ô¶¯²¹È«Ìáʾ * @author hoojo * @createDate 2011-10-20 ÏÂÎç04:54:25 */ @Test public void facetQueryCase() { SolrQuery params = new SolrQuery("*:*"); //ÅÅÐò params.addSortField("id", ORDER.asc); params.setStart(0); params.setRows(200); //FacetΪsolrÖеIJã´Î·ÖÀà²éѯ //·ÖƬÐÅÏ¢ params.setFacet(true) .setQuery("*:*") .setFacetMinCount(1) .setFacetLimit(5)//¶Î //.setFacetPrefix("electronics", "cat") .setFacetPrefix("cor")//²éѯmanu¡¢nameÖйؼü×Öǰ׺ÊÇcorµÄ .addFacetField("manu") .addFacetField("name");//·ÖƬ×Ö¶Î try { QueryResponse response = server.query(params); //Êä³ö²éѯ½á¹û¼¯ SolrDocumentList list = response.getResults(); fail("Query result nums: " + list.getNumFound()); for (int i = 0; i < list.size(); i++) { fail(list.get(i)); } fail("All facet filed result: "); //Êä³ö·ÖƬÐÅÏ¢ List<FacetField> facets = response.getFacetFields(); for (FacetField facet : facets) { fail(facet); List<Count> facetCounts = facet.getValues(); for (FacetField.Count count : facetCounts) { //¹Ø¼ü×Ö - ³öÏÖ´ÎÊý fail(count.getName() + ": " + count.getCount()); } } fail("Search facet [name] filed result: "); //Êä³ö·ÖƬÐÅÏ¢ FacetField facetField = response.getFacetField("name"); List<Count> facetFields = facetField.getValues(); for (Count count : facetFields) { //¹Ø¼ü×Ö - ³öÏÖ´ÎÊý fail(count.getName() + ": " + count.getCount()); } } catch (SolrServerException e) { e.printStackTrace(); } }
|
·ÖƬ²éѯÔÚijЩͳ¼Æ¹Ø¼ü×ÖµÄʱºò»¹ÊǺÜÓÐÓõģ¬¿ÉÒÔͳ¼Æ¹Ø¼ü×Ö³öÏֵĴÎÊý£¬¿ÉÒÔͨ¹ýͳ¼ÆµÄ¹Ø¼ü×ÖÀ´ËÑË÷Ïà¹ØÎĵµµÄÐÅÏ¢¡£
ËÄ¡¢DocumentÎĵµºÍJavaBeanÏ໥ת»»
ÕâÀïת»»µÄBeanÊÇÒ»¸ö¼òµ¥µÄUser¶ÔÏó
package com.hoo.entity; import java.io.Serializable; import org.apache.solr.client.solrj.beans.Field; /** * <b>function:</b> User Entity Bean£»ËùÓб»Ìí¼ÓAnnotation @Field ×¢½âµÄÊôÐÔ½«²ÎÓëindex²Ù×÷ * @author hoojo * @createDate 2011-10-19 ÏÂÎç04:16:00 * @file User.java * @package com.hoo.entity * @project SolrExample * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class User implements Serializable { /** * @author Hoojo */ private static final long serialVersionUID = 8606788203814942679L; //@Field private int id; @Field private String name; @Field private int age; /** * ¿ÉÒÔ¸øÄ³¸öÊôÐÔÖØÃüÃû£¬likes¾ÍÊÇsolr indexµÄÊôÐÔ£»ÔÚsolrIndexÖн«ÏÔʾlikeΪlikes */ @Field("likes") private String[] like; @Field private String address; @Field private String sex; @Field private String remark; public int getId() { return id; } //setter ·½·¨ÉÏÃæÒ²¿ÉÒÔ @Field public void setId(int id) { this.id = id; } public String getName() { return name; } //getter¡¢setter @Override public String toString() { return this.id + "#" + this.name + "#" + this.age + "#" + this.like + "#" + this.address + "#" + this.sex + "#" + this.remark; } }
|
²âÊÔÀà´úÂëÈçÏÂ
package com.hoo.test; import org.apache.solr.client.solrj.beans.DocumentObjectBinder; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.SolrInputField; import org.junit.Test; import com.hoo.entity.User; /** * <b>function:</b>SolrInputDocument implements Map, Iterable * @author hoojo * @createDate 2011-10-19 ÏÂÎç03:54:54 * @file SolrInputDocumentTest.java * @package com.hoo.test * @project SolrExample * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class SolrInputDocumentTest { public final void fail(Object o) { System.out.println(o); } /** * <b>function:</b> ´´½¨SolrInputDocument * @author hoojo * @createDate 2011-10-21 ÏÂÎç03:38:20 */ @Test public void createDoc() { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", System.currentTimeMillis()); doc.addField("name", "SolrInputDocument"); doc.addField("age", 22, 2.0f); doc.addField("like", new String[] { "music", "book", "sport" }); doc.put("address", new SolrInputField("guangzhou")); doc.setField("sex", "man"); doc.setField("remark", "china people", 2.0f); fail(doc); } /** * <b>function:</b> ÀûÓÃDocumentObjectBinder¶ÔÏó½«SolrInputDocument ºÍ User¶ÔÏóÏ໥ת»» * @author hoojo * @createDate 2011-10-21 ÏÂÎç03:38:40 */ @Test public void docAndBean4Binder() { SolrDocument doc = new SolrDocument(); doc.addField("id", 456); doc.addField("name", "SolrInputDocument"); doc.addField("likes", new String[] { "music", "book", "sport" }); doc.put("address", "guangzhou"); doc.setField("sex", "man"); doc.setField("remark", "china people"); DocumentObjectBinder binder = new DocumentObjectBinder(); User user = new User(); user.setId(222); user.setName("JavaBean"); user.setLike(new String[] { "music", "book", "sport" }); user.setAddress("guangdong"); fail(doc); // User ->> SolrInputDocument fail(binder.toSolrInputDocument(user)); // SolrDocument ->> User fail(binder.getBean(User.class, doc)); SolrDocumentList list = new SolrDocumentList(); list.add(doc); list.add(doc); //SolrDocumentList ->> List fail(binder.getBeans(User.class, list)); } /** * <b>function:</b> SolrInputDocumentµÄÏà¹Ø·½·¨ * @author hoojo * @createDate 2011-10-21 ÏÂÎç03:44:30 */ @Test public void docMethod() { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", System.currentTimeMillis()); doc.addField("name", "SolrInputDocument"); doc.addField("age", 23, 1.0f); doc.addField("age", 22, 2.0f); doc.addField("age", 24, 0f); fail(doc.entrySet()); fail(doc.get("age")); //ÅÅÃûÓÐÓã¬ÀàËÆ°Ù¶È¾º¼ÛÅÅÃû doc.setDocumentBoost(2.0f); fail(doc.getDocumentBoost()); fail(doc.getField("name")); fail(doc.getFieldNames());//keys fail(doc.getFieldValues("age")); fail(doc.getFieldValues("id")); fail(doc.values()); } }
|
|