Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Solr¿ª·¢Îĵµ
 
×÷Õߣºhoojo À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-12-31
  3030  次浏览      27
 

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());
}
}
   
3030 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ