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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓà Apache Lucene ºÍ Solr ½øÐÐλÖøÐÖªËÑË÷
 
×÷ÕߣºGrant Ingersoll À´Ô´£ºIBM ·¢²¼ÓÚ 2016-1-12
  2749  次浏览      30
 

ͨ¹ýºÏ²¢·Ç½á¹¹»¯Îı¾ºÍ¿Õ¼äÊý¾Ý¸Ä½øËÑË÷Ó¦ÓóÌÐò

²»¹ÜÊÇͨ¹ýÖ§³Ö GPS µÄÖÇÄÜÊÖ»ú²éÕÒ×î½üµÄ¿§·È¹Ý£¬»¹ÊÇͨ¹ýÉç½»Õ¾µã²éÕÒ¸½½üµÄÅóÓÑ£¬»òÊÇ²é¿´ÌØ¶¨³ÇÊÐÖÐÔËÊäijÖÖÉÌÆ·µÄËùÓлõ³µ£¬Ô½À´Ô½¶àµÄÈËºÍÆóÒµ¶¼Ê¹ÓÃλÖøÐÖªµÄËÑË÷·þÎñ¡£´´½¨Î»ÖøÐÖªËÑË÷·þÎñͨ³£ÊôÓÚ°º¹óµÄרÓýâ¾ö·½°¸µÄÒ»²¿·Ö£¬²¢ÇÒÒ»°ãÓɵØÀí¿Õ¼äר¼ÒÍê³É¡£²»¹ý£¬ºÜÁ÷ÐеĿªÔ´ËÑË÷¿â Apache Lucene ºÍÇ¿´óµÄ Lucene ËÑË÷·þÎñÆ÷ Apache Solr ×î½üÌí¼ÓÁ˿ռäλÖù¦ÄÜ¡£Lucene ºÍ Solr ר¼Ò Grant Ingersoll ½«Öð²½ÏòÄú½éÉܿռäËÑË÷µÄ»ù´¡ÖªÊ¶£¬²¢ÑÝʾÈçºÎÀûÓÃÕâЩ¹¦ÄÜÀ´ÔöÇ¿ÄúµÄÏÂÒ»¸öλÖøÐÖªÓ¦ÓóÌÐò¡£

µØÀíλÖÃÔÚ¿Õ¼äËÑË÷ÖÐÖÁ¹ØÖØÒª£¡µØÀíλÖò»½öÔڵزúÖÐÖÁ×ðΪÍõ£¬½«ÆäÓÃÔÚËÑË÷Öл¹ÄܰïÖúλÓÚÌØ¶¨Î»ÖõÄÓû§¿ìËÙÕÒµ½ÓÐÓõÄÐÅÏ¢¡£ÀýÈ磬Èç¹ûÄúÊÇÆóÒµÃû¼ÌṩÉÌ£¨±ÈÈçÒ»¸ö ¡°»ÆÒ³¡± Õ¾µã£©£¬µ±Óû§ÐèÒªÕÒһλˮ¹ÜάÐÞԱʱ£¬¸ÃÕ¾µã±ØÐë·µ»ØÔÚÓû§×¡Ëù¸½½üµÄάÐÞÔ±¡£Èç¹ûÄúÔËÓªµÄÊÇÒ»¸öÂÃÓÎÕ¾µã£¬ÄÇôÄú±ØÐëÈÃÂÃÓÎÕßÄܹ»ËÑË÷µ½ËûÃÇËùÔÚµÄλÖø½½üµÄÃûʤ£¬´Ó¶ø°ïÖúËûÃǷḻÂÃÓÎÐг̡£Èç¹ûÄúÒª¹¹½¨Ò»¸öÉç½»ÍøÂçÕ¾µã£¬ÄÇô×îºÃʹÓÃλÖÃÐÅÏ¢À´°ïÖúÓû§ÓëÅóÓÑÁªÏµ¡£Î»ÖøÐÖªÉ豸£¨±ÈÈçÆû³µµ¼º½ÏµÍ³ºÍÖ§³Ö GPS µÄÉãÏñ»ú£©ºÍ´óÁ¿Ãâ·ÑµØÍ¼Êý¾ÝµÄÆÕ¼°Îª¹¹½¨Äܹ»ÎªÖÕ¶ËÓû§ËÑË÷¸ß¼¶½á¹ûµÄ Geographical Information Systems (GIS) ÌṩÁ˸÷ÖÖ»ú»á¡£

¿Õ¼äÐÅÏ¢»¹¿ÉÒÔ±»ÀûÓõ½ËÑË÷ÁìÓòÖ®Í⣬µ«ÔÚ±¾ÎÄÖÐÎÒ½«Ö÷Òª¹Ø×¢ÈçºÎͨ¹ý Apache Lucene ºÍ Apache Solr ÀûÓÿռäÐÅÏ¢À´¸Ä½øËÑË÷Ó¦ÓóÌÐò¡£ÎªÊ²Ã´ÒªÊ¹ÓÃËÑË÷ÒýÇæ£¿²¢²»ÊÇÒòΪËüÊÇÐí¶àºÜºÃ£¨ÉõÖÁÃâ·Ñ£©µÄ GIS ¹¤¾ßÖеıØÒª×é³É²¿·Ö¡£²»¹ý£¬½«Ó¦ÓóÌÐò¹¹½¨ÔÚËÑË÷ÒýÇæµÄ»ù´¡ÉÏÄܹ»Ìṩ¼¸¸öÇ¿´óµÄ¹¦ÄÜ£¬ÕâÊÇÆäËû´«Í³Í¾¾¶ÎÞ·¨ÊµÏֵġ£ËÑË÷ϵͳÔںϲ¢½á¹¹»¯ºÍ·Ç½á¹¹»¯·½Ãæ·Ç³£Ç¿¾¢£¬ÕâÔÊÐíÓû§ÊäÈë×ÔÓÉÐÎʽµÄ²éѯ£¬±ÈÈçÔÚËÑË÷Ãâ·ÑÎı¾µÄÃèÊöºÍ±êÌâµÄͬʱ¸ù¾ÝµØÀíλÖÃÊý¾ÝÏÞÖÆ»òÐ޸Ľá¹û¡£ÀýÈ磬ÂÃÓÎÕ¾µã¿ÉÒÔʵÏÖÕâÑùÒ»¸öÌØÐÔ£¬ËüÈÃÓû§Äܹ»ÔÚÒ»ÃëÖ®ÄÚÕÒµ½ÂíÈøÖîÈûÖݲ¨Ê¿¶ÙÊеÄËùÓÐ 24 СʱÌṩ·þÎñ²¢ÇÒÅäÓÐÊæÊÊ´²¾ßµÄËÄÐǼ¶±ö¹Ý¡£ÓÐЩËÑË÷ϵͳ£¨±ÈÈç Apache Solr£©»¹Ìṩ¶Ô½á¹û¼¯½øÐзÖÀࣨ²Î¿¼×ÊÁÏ ²¿·ÖÌṩ¹ØÓÚ Solr ºÍ·ÖÀàµÄÐÅÏ¢£©¡¢Í»³öÏÔʾºÍƴд¼ì²éµÄ¹¦ÄÜ£¬´Ó¶øÈÃÓ¦ÓóÌÐòÄܹ»°ïÖúÓû§¸ßЧµØ²éÕÒËùÐèµÄ½á¹û¡£

ÎÒÊ×Ïȼòµ¥½éÉÜ Lucene µÄһЩ¹Ø¼ü¸ÅÄÉîÈëµÄϸ½ÚÁô¸ø¶ÁÕß×Ô¼ºÌ½Ë÷¡£½ÓÏÂÀ´£¬ÎÒ½«½éÉÜһЩ»ù´¡µÄµØÀí¿Õ¼äËÑË÷¸ÅÄî¡£GIS ÊÇÒ»¸ö¹ã·ºµÄÁìÓò£¬±¾ÎÄÄÑÒÔ¶ÔÆä½øÐÐÏ꾡µÄÃèÊö£¬Òò´ËÎÒ½ö¹Ø×¢Ò»Ð©²éÕÒ·þÎñ¡¢ÈËºÍÆäËûÈÕ³£ÊÂÏîËùÐèµÄ»ù´¡¸ÅÄî¡£±¾ÎĵÄĩβÊǹØÓÚʹÓà Lucene ºÍ Solr Ë÷ÒýºÍËÑË÷¿Õ¼äÐÅÏ¢µÄ·½·¨µÄÌÖÂÛ¡£ÎÒ½«Í¨¹ýÒ»¸öÕæÊµµ«ºÜ¼òµ¥µÄÀý×ÓÀ´²ûÊöÕâЩ¸ÅÄ²¢ÇÒʹÓÃÀ´×Ô OpenStreetMap (OSM) ÏîÄ¿µÄÊý¾Ý£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£

»Ø¹Ë¹Ø¼üµÄ Lucene ¸ÅÄî

Apache Lucene ÊÇÒ»¸ö»ùÓÚ Java? µÄ¸ßÐÔÄÜËÑË÷¿â¡£Apache Solr ÊÇÒ»¸öʹÓà Lucene ͨ¹ý HTTP À´ÌṩËÑË÷¡¢·ÖÀàµÈ¹¦ÄܵÄËÑË÷·þÎñÆ÷¡£ËüÃǶ¼Ê¹Óü۸ñÊÊÖÐµÄ Apache Software License¡£²Î¼û ²Î¿¼×ÊÁÏ Á˽â¸ü¶à¹ØÓÚÿ¸ö²úÆ·ÌṩµÄÌØÐÔºÍ API µÄÐÅÏ¢¡£

´Ó±¾ÖÊÉÏ¿´£¬Solr ºÍ Lucene ¶¼½«ÄÚÈݱíʾΪÎĵµ¡£ÎĵµÓÉÒ»¸ö»ò¶à¸ö×Ö¶Î ºÍÒ»¸ö±íÃ÷ÎĵµµÄÖØÒªÐԵĿÉÑ¡ÔöÇ¿£¨boost£©Öµ ×é³É¡£×Ö¶ÎÓÉÐèÒªË÷ÒýºÍ´¢´æµÄʵ¼ÊÄÚÈÝ¡¢¸æËß Lucene ÈçºÎ´¦Àí¸ÃÄÚÈݵÄÔªÊý¾ÝºÍ±íÃ÷¸Ã×ֶεÄÖØÒªÐÔµÄÔöǿֵ×é³É¡£ÓÉÄú¾ö¶¨ÒÔºÎÖÖ·½Ê½½«ÄÚÈݱíʾΪÎĵµºÍ×ֶΣ¬ÕâÈ¡¾öÓÚÄúÏ£ÍûÔõÑùËÑË÷»ò·ÃÎÊÎĵµÖеÄÐÅÏ¢¡£ÔÚÿ¸öÄÚÈݵ¥ÔªÖУ¬Äú¿ÉÒÔʹÓÃÒ»¶ÔÒ»µÄ¹ØÏµ£¬Ò²¿ÉÒÔʹÓÃÒ»¶Ô¶àµÄ¹ØÏµ¡£ÀýÈ磬ÎÒ¿ÉÒÔÑ¡ÔñÓÃÒ»¸ö°üº¬¼¸¸ö×ֶΣ¨±ÈÈç title¡¢keywords ºÍ body£©µÄÎĵµÀ´±íʾһ¸ö Web Ò³Ãæ¡£Èç¹ûÊÇÒ»±¾Ê飬ÎÒÔòÑ¡Ôñ½«ËüµÄÿһҳ±íʾΪһ¸ö¶ÀÁ¢µÄÎĵµ¡£ÉÔºóÄú½«¿´µ½£¬ÕâÒ»Çø·ÖÔÚΪËÑË÷±àÂë¿Õ¼äÊý¾Ýʱ·Ç³£ÖØÒª¡£¿ÉÒÔΪ×Ö¶ÎÖеÄÄÚÈݽ¨Á¢Ë÷Òý£¬»òÕßÔ­Ñù´¢´æ¹©Ó¦ÓóÌÐòʹÓá£Èç¹ûΪÄÚÈݽ¨Á¢ÁËË÷Òý£¬Ó¦ÓóÌÐò¾Í¿ÉÒÔʹÓÃËü¡£»¹¿ÉÒÔ·ÖÎö½¨Á¢ÁËË÷ÒýµÄÄÚÈÝÀ´Éú³É´Ê»ã£¨Í¨³£³ÆÎªÁîÅÆ£©¡£´Ê»ãÊÇÔÚËÑË÷¹ý³ÌÖвéÕÒºÍʹÓõĻù´¡¡£´Ê»ãͨ³£ÊÇÒ»¸ö´Ê£¬µ«Õâ²»ÊDZØÒªµÄ¡£ÎÒ½¨ÒéÄúͨ¹ý ²Î¿¼×ÊÁÏ ²¿·ÖÁ˽âËùÓÐÕâЩ¸ÅÄî¡£

ÔÚ²éѯ·½Ã棬Lucene ºÍ Solr Ϊ±í´ïÓû§²éѯ£¨´Ó»ù´¡µÄ¹Ø¼ü×Ö²éѯµ½¶ÌÓïºÍͨÅä·û²éѯ£©Ìṩ·á¸»µÄ¹¦ÄÜ¡£Lucene ºÍ Solr »¹Í¨¹ýÓ¦ÓÃÒ»¸ö»ò¶à¸ö¶Ô¿Õ¼äËÑË÷·Ç³£ÖØÒªµÄ¹ýÂËÆ÷À´ÌṩÏÞÖÆ¿Õ¼äµÄÄÜÁ¦¡£·¶Î§²éѯ ºÍ·¶Î§¹ýÂËÆ÷ ÊÇÏÞÖÆ¿Õ¼äµÄ¹Ø¼ü»úÖÆ¡£ÔÚ·¶Î§²éѯ£¨»ò¹ýÂËÆ÷£©ÖУ¬Óû§ÉùÃ÷ÐèÒª½«ËùÓÐËÑË÷µ½µÄÎĵµÏÞÖÆÔÚʹÓÃ×ÔÈ»ÅÅÐòµÄÁ½¸öÖµÖ®¼ä¡£ÀýÈ磬ͨ³£Ê¹Ó÷¶Î§²éѯÀ´²éÕÒ·¢ÉúÔÚ¹ýÈ¥Ò»Äê»òÉÏÒ»¸öÔµÄËùÓÐÎĵµ¡£ÔÚ´¦Àí¹ý³ÌÖУ¬Lucene ±ØÐëö¾ÙÎĵµÖеĴʻãÒÔʶ±ðÔÚ·¶Î§Ö®ÄÚµÄËùÓÐÎĵµ¡£ÈçÎÒÔÚÉÔºóչʾµÄÒ»Ñù£¬ÕýÈ·µØÉèÖ÷¶Î§²éѯÊÇÌáÉý¿Õ¼äËÑË÷Ó¦ÓóÌÐòµÄ²éѯÐÔÄܵĹؼüÒòËØÖ®Ò»¡£
Lucene ºÍ Solr »¹Ìṩº¯Êý²éѯ µÄ¸ÅÄËüÔÊÐíÄúʹÓÃ×ֶεÄÖµ£¨±ÈÈç¾­¶ÈºÍγ¶È£©×÷Ϊ¼Ç¼»úÖÆµÄÒ»²¿·Ö£¬¶ø²»Êǽö½öʹÓÃ×é³ÉÖ÷ÒªµÄ¼Ç¼»úÖÆµÄÄÚ²¿Êý¾Ý¼¯ºÏ¡£¸Ã¹¦ÄÜÔÚºóÎÄÎÒÑÝʾʹÓà Solr µÄһЩ»ùÓÚ¾àÀëµÄº¯ÊýʱÓõ½¡£

µØÀí¿Õ¼äËÑË÷¸ÅÄî

ÔÚ¹¹½¨¿Õ¼äËÑË÷Ó¦ÓóÌÐòʱ£¬×îÖØÒªµÄÊÇʶ±ðÐèÒªÌí¼Óµ½Ó¦ÓóÌÐòÖеĿռäÊý¾Ý¡£ÕâЩÊý¾Ýͨ³£ÒÔijЩµØÀí±àÂëµÄÐÎʽ³öÏÖ£¬±ÈÈçγ¶È¡¢¾­¶ÈºÍº£°Î£¬»òÒÔÓÊÕþ±àÂë»ò½ÖµÀµØÖ·µÄÐÎʽ³öÏÖ¡£±àÂëϵͳµÄ¸ñʽԽ¹æ·¶£¬ËüÔÚÄúµÄϵͳÖеÄʹÓþÍÔ½ÈÝÒס£ÀýÈ磬Ãñ¸è ¡°Over the River and Through the Woods¡±£¨ÆäÖÐÓÐÕâÑùµÄ¸è´Ê£º¡°to Grandmother's house we go¡±£©¾Í½«ºÜ¶à¿Õ¼äÐÅÏ¢±àÂëµ½Á˸è´ÊÖУ¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£µ«ÕâЩÐÅÏ¢ÔÚ GIS ϵͳÖоÍûÓжà´óÓô¦£¬ÒòΪÎÒÃDz»ÖªµÀСºÓºÍÉ­ÁÖµÄλÖ᣸ÃÐÅÏ¢Óëµ½ÍâÆÅ¼ÒµÄÏêϸ·½Ïò£¨°üº¬³ö·¢µØÖ·ºÍµ½´ïµØÖ·µÄ£©Ïà±È£¬Äú½«Á˽⵽ΪʲôÕýÈ·±àÂëµØÖ·Èç´ËÖØÒª¡££¨ÓÐȤµÄÊÇ£¬Äܹ»ÌáÈ¡ºÍ±àÂë¸ü³£Óõķ½ÏòºÍµØÀíʵÌå ¡ª¡ª ±ÈÈç¶É¹ýСºÓ »òÔÚרɫ·¿×Ó¸½½ü ¡ª¡ª ²¢¸ù¾ÝËüÃǽøÐÐÍÆ¶ÏµÄϵͳҲÊǷdz£ÓÐÓõ쬵«Õâ²»ÊôÓÚ±¾ÎĵÄÌÖÂÛ·¶Î§£©¡£

³ýÁËÓÃÓÚʶ±ðµØÀíλÖõÄԭʼµØÀí±àÂëÊý¾ÝÖ®Í⣬Ðí¶à GIS ϵͳ»¹¿ÉÒÔÌí¼ÓÓëʵ¼ÊλÖÃÏà¹ØµÄÐÅÏ¢¡£ÀýÈ磬µ¼º½ÏµÍ³¿ÉÒÔʹÓÃÔÚµØÍ¼Éϰ´Ë³ÐòÁгöµÄһϵÁÐλÖÃÀ´´´½¨Ò»Ìõ´Ó A µãµ½ B µãµÄ·Ïß¡£»òÕ߯øÏóѧ¼Ò¿ÉÒÔ½«½µÓê»ò¶ñÁÓµÄÌìÆøÊý¾ÝÌí¼Óµ½Ìض¨ÇøÓòµÄµØÍ¼ÉÏ£¬´Ó¶øÔÊÐíÓû§ËÑË÷µ½Ìض¨ÇøÓòµÄ½µÓêÁ¿¡£¾ÓסµØµãÏàÁÚµÄÈËͨ³£½«Ð¡µÄÇøÓòºÏ²¢ÆðÀ´£¬´Ó¶øÐÎ³É ZIP ±àÂë¡¢µØÇø±àÂ룬ÉõÖÁÊdzÇÕò¡¢ÊлòÖÝ¡£ÀýÈçÔÚ OSM ÖУ¬Óû§¿ÉÒԱ༭ºÍ¸²¸ÇµØÍ¼¶¥²ãµÄÐÅÏ¢£¬±ÈÈçÂÃÓξ°µã»ò½ÖµÀ¡£Í¨¹ýºÏ²¢¸÷²ãµÄÐÅÏ¢½¨Á¢ËüÃÇÖ®¼äµÄ¹ØÏµ²¢½øÐиú×Ù£¬¿ÉÒÔÉú³É¸ü¼Ó¶¯Ì¬ºÍÇ¿´óµÄÓ¦ÓóÌÐò¡£

±íʾ¿Õ¼äÊý¾Ý

²»¹ÜÓëÒ»¸ö»ò¶à¸öλÖÃÏà¹ØµÄÐÅÏ¢ÊÇʲô£¬ËÑË÷Ó¦ÓóÌÐò¶¼ÐèҪͨ¹ýÒ»ÖÖ¸ßЧµÄ·½Ê½À´±íʾÕâЩÊý¾Ý¡£¾¡¹Ü¿ÉÒÔͨ¹ý¼¸ÖÖ·½Ê½À´±íʾλÖÃÐÅÏ¢£¬µ«ÎÒ½ö¹Ø×¢Óë Lucene Ïà¹ØµÄ·½Ê½¡£Ê×ÏÈÐèҪעÒâµÄÊÇ£¬Ðí¶àÀàÐ͵ĵØÀí¿Õ¼äÊý¾Ý¶¼¿ÉÒÔÓÃËüÃÇµÄ ¡°Ô­Ê¼¡± ¸ñʽ±íʾ£¬²¢ÇÒÄܹ»ÔÚËÑË÷Ó¦ÓóÌÐòÖкܺõط¢»Ó×÷Óá£ÀýÈ磬Syracuse ±íʾ³ÇÊÐ Syracuse µÄÍêÃÀ·½Ê½£¬Óû§Ö»ÒªÔÚËÑË÷À¸ÖÐÊäÈë Syracuse ¾Í¿ÉÒÔÕÒµ½°üº¬ Syracuse µÄËùÓÐÎĵµ£¬ÊäÈëÆäËûËÑË÷¹Ø¼ü´ÊÒ²½«È¡µÃÀàËÆµÄ½á¹û¡£Êµ¼ÊÉÏ£¬Ô­Ê¼¸ñʽÊÇÓÃÓÚ±íʾ´øÃû³ÆµÄλÖ㬱ÈÈç³ÇÊС¢ÖÝºÍ ZIP ±àÂëµÄ×î³£Ó÷½·¨¡£²»¹ýҪעÒ⣬¾¡¹ÜÎÒʹÓÃÁËÊõÓïԭʼ±íʾ£¬ÄúÈÔÈ»¿ÉÒÔÏȶÔÊý¾Ý½øÐÐת»»»ò¸ñʽ»¯¡£ÀýÈ磬½« New York ת»»³É NY ͨ³£ÊÇÒ»ÖÖºÏÀíµÄ×ö·¨¡£

ÔÚÎÒ½éÉÜ Lucene Äܹ»Ê¹Óõıíʾ·½Ê½Ö®Ç°£¬ÄúÒ»¶¨ÒªÀí½âËùÓбíʾ·½Ê½¶¼±ØÐ뿼Âǵ½Éú³ÉËüÃǵĿռäÒýÓ㨲μû ²Î¿¼×ÊÁÏ£©¡£ÔÚÃÀ¹ú£¬×î³£¼ûµÄÊÇ World Geodetic System£¬Ëüͨ³£ËõдΪ WGS 84£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£¾¡¹ÜÔÚijЩϵͳ֮¼äÔÊÐí½øÐÐת»»£¬µ«×îºÃÓÃÒ»¸öϵͳÀ´±íʾÄúµÄËùÓÐÊý¾Ý¡£±¾ÎļÙÉèʹÓÃͬһ¸öϵͳ±íʾÊý¾Ý¡£

ʹÓà Lucene ºÍ Solr ½øÐÐËÑË÷ʱ£¬Î³¶ÈºÍ¾­¶È£¨ËõдΪ lat/lon£©µÈÊý×Ö¿Õ¼äÐÅÏ¢µÄ±íʾ·½Ê½ÊÇ×îÓÐȤµÄ¡£Î³¶ÈºÍ¾­¶Èͨ³£Ê¹ÓÃÓë±¾³õ×ÓÎçÏߣ¨Î»ÓÚÓ¢¹úµÄ¸ñÁÖÍþÖΣ©Ïà¾àµÄ¶È¡¢·ÖºÍÃëÀ´±íʾ£¬²¢ÇÒͨ³£ÐèҪʹÓà double£¨»ò¸ü¸ßµÄ¾«¶È£©À´±íʾ¡£ÀýÈ磬¶ÔÓÚÎÒµÄÀý×ÓÖÐʹÓõÄÊý¾Ý ¡ª¡ª ÃÀ¹úŦԼÖÝµÄ Syracuse ÊÐ ¡ª¡ª ËüµÄ¾­¶ÈΪ¶«¾­ 76.150026£¨Èç¹ûûÓÐÖ¸¶¨¶«·½£¬ÔòΪ -76.150026£©ºÍ±±Î³ 43.049648¡£

±àÂëÿ¸öγ¶ÈºÍ¾­¶È¿ÉÄܵ¼ÖÂË÷Òý´óÁ¿Î¨Ò»µÄ´Ê»ã£¬ÕâÈ¡¾öÓÚÓ¦ÓóÌÐò¡£Õâ»áÏÔÖø¼õÂýËÑË÷ËÙ¶È£¬²¢ÇÒÄú½«ÔÚ±¾ÎĵĺóÃæ¿´µ½£¬Õâͨ³£ÊDz»±ØÒªµÄ¡£ÊÂʵÉÏ£¬Ðí¶àµØÍ¼Ó¦ÓóÌÐò½«ËÑË÷ÓëÌØ¶¨ÁìÓò¹ØÁªÆðÀ´£¬Òò´Ë´¢´æ¹ØÓÚÌØ¶¨ÇøÓòµÄÊʵ±ÐÅÏ¢»áÉú³É¸üÉٵĴʻ㣬²¢ÇÒ²»¶ÔËÑË÷½á¹û²úÉúºÜ´óµÄ¸ºÃæÓ°Ïì¡£ÕâÖÖÔÚ¾«È·¶ÈÉϲÉÈ¡ÕÛÖԵķ½·¨Í¨³£½«Î³¶ÈºÍ¾­¶È·â×°µ½²ãÖС£Äú¿ÉÒÔ½«Ã¿¸ö²ã¿´×÷ÊǵØÍ¼µÄÌØ¶¨²¿·ÖµÄËõ·Å¼¶±ð£¬±ÈÈçλÓÚÃÀ¹úÖÐÑëÉÏ·½µÄµÚ 2 ²ã¼¸ºõ°üº¬ÁËÕû¸ö±±ÃÀ£¬¶øµÚ 19 ²ã¿ÉÄÜÖ»ÊÇij»§È˼ҵĺóÔº¡£ÓÈÆäÊÇ£¬Ã¿¸ö²ã¶¼½«µØÍ¼·Ö³É 2²ã # µÄÏä×Ó»òÍø¸ñ¡£È»ºó¸øÃ¿¸öÏä×Ó·ÖÅäÒ»¸öºÅÂë²¢Ìí¼Óµ½ÎĵµË÷ÒýÖС£ÎÒ½«ÔÚÏÂһС½Ú½âÊÍÈçºÎÀûÓøÃÐÅÏ¢¼Ó¿ìËÑË÷ËÙ¶È¡£

Lucene ´Ê»ãÖеÄγ¶ÈºÍ¾­¶Èͨ³£±íʾΪÁ½¸ö²»Í¬µÄ×ֶΣ¬µ«ÊÇÕâÔÚһЩӦÓóÌÐòÖпÉÄÜ»áÓ°ÏìÐÔÄÜ¡£Èç¹ûÏ£ÍûʹÓÃÒ»¸ö×ֶΣ¬ÄÇô¿ÉÒÔʹÓà Geohash ±àÂ뷽ʽ½«Î³¶È/¾­¶È±àÂëµ½Ò»¸ö String ÖУ¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£Geohash µÄºÃ´¦ÊÇÄܹ»Í¨¹ýÇÐȥɢÁÐÂëĩβµÄ×Ö·ûÀ´ÊµÏÖÈÎÒâµÄ¾«¶È¡£ÔÚÐí¶àÇé¿öÏ£¬ÏàÁÚµÄλÖÃͨ³£ÓÐÏàͬµÄǰ׺¡£ÀýÈ磬ÔÚ geohash.org ÖÐÊäÈë Syracuse, NY ½«Éú³ÉÉ¢ÁÐÂë dr9ughxjkrt4b£¬¶øÊäÈë Syracuse µÄ½¼Çø Cicero, NY Éú³ÉÉ¢ÁÐÂë dr9veggs4ptd3£¬ËüÃǵÄǰ׺¶¼ÊÇ dr9¡£

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÖ»ÊÇ̸µ½¼¸¸öµ¥¶ÀµÄµã£¬µ«ÊÇÐí¶àµØÀí¿Õ¼äÓ¦ÓóÌÐòÔÚͼÏñ¡¢Â·ÏߺÍÊý¾ÝÖÐµÄÆäËû¹ØÏµ·½Ãæ¶¼ºÜÓÐȤ¡£Lucene ºÍ Solr ²»¾ß±¸ÕâЩ¹¦ÄÜ£»²Î¼û ²Î¿¼×ÊÁÏ ÁË½â¹ØÓÚÕâЩ¸ÅÄîµÄ¸ü¶àÐÅÏ¢¡£

ÔÚËÑË÷Öн«¿Õ¼äÊý¾ÝÓëÎı¾ºÏ²¢

Ò»µ©ÔÚË÷ÒýÖÐÌí¼ÓÁËÊý¾ÝÖ®ºó£¬ËÑË÷Ó¦ÓóÌÐòÔÚÓëÊý¾Ý½»»¥Ê±ÖÁÉÙÓÐ 5 ÖÖ»ù±¾ÒªÇó£º

¾àÀë¼ÆË㣺¸ù¾Ý¸ø¶¨µã¼ÆËãËüµ½ÆäËûµãµÄ¾àÀë¡£

ÏÞ¶¨¿ò¹ýÂËÆ÷£º²éÕÒÄ³Ð©ÌØ¶¨ÇøÓòÄÚËùÓÐÆ¥ÅäÏÎĵµ£©¡£

ÅÅÐò£º¸ù¾Ýµ½¹Ì¶¨µãµÄ¾àÀë¶ÔËÑË÷½á¹û½øÐÐÅÅÐò¡£

Ïà¹Ø¶È¸Ä½ø£ºÊ¹ÓþàÀë×÷Ϊ¼Ç¼ÖеÄÔöÇ¿ÒòËØ£¬Í¬Ê±ÔÊÐíÆäËûÒòËØ·¢»Ó×÷Óá£

²éѯ½âÎö£ºÔÚ¸ø³öλÖõĵØÖ·»òÆäËûһЩÓû§¹æ¶¨Ê±£¬´´½¨¿ÉÓÃÓÚ¸ù¾ÝË÷ÒýÊý¾Ý½øÐÐËÑË÷µÄ±àÂë±íʾ¡£
Õâ 5 ¸öÒòËØ¶¼¿ÉÒÔÔÚ»ùÓÚλÖõÄÓ¦ÓóÌÐòÖаçÑÝÖØÒªµÄ½ÇÉ«£¬µ«ÊÇÎÒÔÚÕâÀïÖ÷Òª¹Ø×¢¾àÀë¼ÆËã¡¢ÏÞ¶¨¿ò¹ýÂ˺Ͳéѯ½âÎö¡£ÅÅÐòºÍÏà¹Ø¶È¸Ä½ø½öʹÓþàÀë¼ÆË㣬ÎÒ½«ÔÚ±¾ÎĵĺóÃæ½éÉÜËüÃǵÄʵ¼ÊÓ¦Óá£

¾àÀë¼ÆËã

µ±¼ÆËãÓÃÓÚ GIS Ó¦ÓóÌÐòµÄ¾àÀëʱ£¬Ò»¶¨ÒªÖªµÀÓÐÐí¶à²»Í¬µÄʵÏÖ·½·¨£¬²¢ÇÒÿÖÖ·½·¨¶¼ÓÐÆäÓÅȱµã¡£¾àÀë¼ÆËã¿ÉÒÔ»®·Ö³É 3 ¸ö×飬ÕâÈ¡¾öÓÚÓ¦ÓóÌÐòÑ¡ÔñÒÔʲô·½Ê½¶ÔµØÇò½øÐн¨Ä£¡£ÔÚһЩÇé¿öÏ£¬ÍêÈ«¿ÉÒÔ²ÉÓÃÆ½ÃæµØÇòÄ£ÐÍ£¬Í¨¹ýÎþÉüһЩ¾«È·ÐÔÀ´»ñÈ¡ËÙ¶È¡£ÔÚÆ½ÃæµØÇòÄ£ÐÍÖУ¬´ó²¿·Ö¾àÀë¼ÆËã¶¼Êǹ´¹É¶¨ÀíµÄ±äÌå¡£ÔÚÆäËûÇé¿öÏÂʹÓÃÇòÃæÄ£ÐÍ£¬ËùʹÓõÄÖ÷Òª¾àÀë¼ÆËãΪ´óÔ²»¡³¤£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£´óÔ²»¡³¤¼ÆËãÇòÃæÁ½µãÖ®¼äµÄ×î¶Ì¾àÀë¡£µ±Á½µãÖ®¼äµÄ¾àÀëÏà¸ôºÜÔ¶ºÍÒªÇó¸ü¸ßµÄ׼ȷ¶Èʱ£¬ÐèҪʹÓÃÇòÃæÄ£ÐÍ¡£×îºó£¬¿ÉÒÔʹÓÃÍÖÔ²µÄµØÇòÄ£ÐÍºÍ Vincenty ¹«Ê½£¨²Î¼û ²Î¿¼×ÊÁÏ£©À´»ñÈ¡¸ß¶È¾«È·µÄ¾àÀ루¾«È·µ½ 0.5 ºÁÃ×£©£¬µ«ÊÇÔÚÐí¶àÓ¦ÓóÌÐòÖÐÓò»ÉÏÕâÖÖ¸´ÔÓµÄÄ£ÐÍ¡£

µ±È»£¬ÆäËû¾àÀë¼ÆËãÒ²ÊÇÓÐÓõ쬱ÈÈçÂü¹þ¶Ù¾àÀ룬Ëü·´Ó³ÔÚÓɽÖÇø×é³ÉµÄ³ÇÊÐÖÐÐÐ×ߵľàÀ루ÀýÈçÔÚÒ»Á¾³ö×â³µÖд©Ô½Å¦Ô¼³ÇµÄÂü¹þ¶Ù£©¡£µ«ÊÇΪÁËʵÏÖ±¾ÎĵÄÄ¿µÄ£¬ÎÒ½«Ê¹ÓÃÆ½ÃæµØÇòÄ£ÐͺʹóÔ²»¡³¤¾àÀëÀ´ÑÝʾ¾àÀ룬ÆäËû·½·¨Áô¸ø¶ÁÕß̽Ë÷¡£´ËÍ⣬±¾ÎIJ»½«º£°Î×÷ΪӰÏìÒòËØ£¬µ«ÊÇһЩӦÓóÌÐò¿ÉÄÜÐèÒª¿¼ÂǺ£°Î¡£Òª»ñÈ¡¸ü¶à¹ØÓÚµØÀí¾àÀëµÄÐÅÏ¢£¬Çë²Î¼û ²Î¿¼×ÊÁÏ¡£

²îÖ®ºÁÀ壬ʧ֮ǧÀï

ÔÚÐí¶à±¾µØËÑË÷Ó¦ÓóÌÐòÖУ¬¾«¶ÈµÄÐèÇóÓÉÓ¦ÓóÌÐò±¾Éí¾ö¶¨¡£ÔÚijЩÇé¿öÏ£¬Æ«ÀëÒ»¹«ÀïÎÊÌâ²¢²»´ó£¬¶øÔÚÁíһЩÇé¿öÏ£¬Æ«À뼸ºÁÃ׾ͻᵼÖÂÑÏÖØµÄÎÊÌâ¡£ÀýÈ磬ŷ¼¸ÀïµÃ¾àÀë¼ÆËã¶ÔÓÚ¿ç¶ÈºÜ³¤µÄ¾àÀ루±ÈÈç¿çÖÝ£©Í¨³£²»¹»¾«È·£¬¼´Ê¹ÊǰëÕýʸ£¨´óÔ²£©·½·¨Ò²²»×ãÒÔΪijЩ³¡ºÏÌṩËùÐèµÄ¾«¶È£¬ÒòΪ½«µØÇò½¨Ä£³ÉÍÖÔ²Ìå±È½¨Ä£³ÉÇòÌå¸ü¾«È·¡£¶ÔÓÚÕâЩÇé¿ö£¬Ê¹Óà Vincenty ¹«Ê½½«µÃµ½¸ü¼ÓÂúÒâµÄ½á¹û¡£ÔÚÆäËûÓ¦ÓóÌÐòÖУ¬Î¨Ò»ÐèҪעÒâµÄÊÂÇéÊǶԽá¹ûµÄÅÅÐò£¬Òò´Ë¿ÉÒÔʹÓà Squared Euclidean Distance£¨Êµ¼Ê²»ÊǾàÀ룩£¬´Ó¶ø±ÜÃâÆ½·½¸ù¼ÆËã¡£

ÏÞ¶¨¿ò¹ýÂËÆ÷

ÔÚÐí¶à»ùÓÚλÖõÄÓ¦ÓóÌÐòÖУ¬¿ÉÒÔËÑË÷µ½Êý°ÙÍòÌõµØÖ·ÐÅÏ¢¡£±éÀúËùÓÐÕâЩÊý¾ÝÀ´²éÕҼȰüº¬¹Ø¼ü×ÖÓÖÔÚÓû§Ö¸¶¨µÄ¾àÀëÖ®ÄÚµÄÎĵµ¼¯½«ÐèÒª»¨·Ñ´óÁ¿Ê±¼ä¡£Ò»ÖÖºÏÀíµÄ×ö·¨ÊÇÏÈËõСÎĵµ¼¯µÄ·¶Î§È»ºóÔÙ¼ÆËãÏà¹ØµÄ×Ó¼¯¡£Èç¹û½ö´¢´æÁËγ¶ÈºÍ¾­¶ÈÐÅÏ¢£¬ÄÇôËõСÎĵµ¼¯µÄÊ×Ñ¡·½·¨ÊÇ´«Èë°üº¬Ö¸¶¨Î»ÖõÄÖܱßÇøÓòµÄ·¶Î§¡£Õâ¿ÉÒÔͨ¹ý ͼ 1 À´±íʾ£¬ÆäÖв»Íêȫ͸Ã÷µÄ·½¿ò±íʾ°üº¬ÄÏ¿¨ÂÞÀ´ÄÉÖݵIJé¶û˹¶Ù£¨Charleston£©Êм°ÆäÖܱߵØÇøµÄÏÞ¶¨¿ò£º

ͼ 1. λÓÚ Charleston ÖÐÑëÉÏ·½µÄÏÞ¶¨¿ò

ÄÏ¿¨ÂÞÀ´ÄÉÖݲé¶û˹¶ÙÊÐÊÐÇø£¬OpenStreetMap Ìṩ

Èç¹ûÓ¦ÓóÌÐò»¹Ê¹ÓòãÐÅÏ¢»ò Geohash ÐÅÏ¢£¬ÄÇô¿ÉÒÔʹÓÃÕâЩֵÀ´¸üºÃµØËõСÐèÒªËÑË÷µÄÎĵµµÄ·¶Î§¡£ÎÒ½«ÔÚÌÖÂÛʹÓà Lucene ºÍ Solr ½¨Á¢Ë÷ÒýºÍËÑË÷µÄϸ½ÚʱÑÝʾÕâµã¡£

²éѯ½âÎö

²éѯ½âÎöµÄÄ¿µÄÊÇÈ·¶¨²éѯµÄÄĸö²¿·Ö°üº¬ËùËÑË÷µÄ¹Ø¼ü×Ö£¬Äĸö²¿·Ö°üº¬Î»ÖÃÐÅÏ¢¡£Õâ¸ö¹ý³ÌµÄºó°ë²¿·Ö³ÆÎªµØÀí±àÂ루geocoding£©£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£¾¡¹ÜÎÒÔÚÕâÀïÔÚ²éѯ½âÎöµÄÉÏÏÂÎÄÖÐÌÖÂÛµØÀí±àÂ룬ËüÔÚË÷ÒýÆÚ¼äÒ²·Ç³£ÓÐÓá£Ç뿼ÂÇÏÂÃæµÄÓû§²éѯÀý×Ó£º

1600 Pennsylvania Ave. Washington, DC
1 Washington Av. Philadelphia Pennsylvania
Mall of America, 60 East Broadway Bloomington, MN 55425
Restaurants near Mall of America
Restaurants in the Mall of America

²é¿´Ç°Á½¸ö²éѯ¿ÉÒÔ·¢ÏÖһЩÓÐȤµÄ¶«Î÷£º

´Ê»ãµÄ˳Ðòͨ³£ºÜÖØÒª£¬µ«ÊÇÔÚ´¿Îı¾ËÑË÷ÖУ¬Ë³Ðò¿ÉÄܲ»ÖØÒª¡£

µØÃû±íºÍÆäËû¿Õ¼ä×ÊÔ´£¬±ÈÈç GeoNames£¨²Î¼û ²Î¿¼×ÊÁÏ£©¿ÉÄÜÔÚ½«µØÖ·×ª»»³ÉλÖÃʱ·Ç³£ÓÐÓá£ÕâЩ×ÊԴͨ³£°üº¬ÂÃÓξ°µãµÄÁÐ±í ¡ª¡ª ÀýÈ磬°×¹¬µÈ±êÖ¾ÐÔ½¨Öþ¡£

¹æ·¶»¯Ëõд£¬±ÈÈç Ave. ºÍ DC£¬»òʹÓÃͬÒå´ÊÀ´°üº¬Óû§ÊäÈëµØÖ·ÐÅÏ¢µÄ¸÷ÖÖ±äÌå·Ç³£ÖØÒª¡£

Ê£ÓàµÄ²éѯ½«Õ¹Ê¾¼¸¸ö΢ÃîµÄµØ·½¡£ÀýÈ磬ÔÚµÚÈý¸ö²éѯÖУ¬Óû§Ö¸¶¨ÁËÍêÕûµÄµØÖ·£»Èç¹ûÄúÒªËÑË÷ÿ¸ö×Ö¶ÎÒÔ»ñµÃÃû³Æ¡¢µØÖ·¡¢³ÇÊÐºÍ ZIP£¬ÄÇô¾Í±ØÐëÕýÈ·µØ½âÎöÕâЩÊôÐÔ¡£ÔÚ×îºóÁ½¸ö²éѯÖУ¬Óû§Ñ¡Ôñ near »¹ÊÇ in ÊǷdz£ÖØÒªµÄ¡£Óë Mall µÄ¾àÀëÔÚÒ»¶¨·¶Î§ÄÚµÄËùÓз¹µê¶¼·ûºÏµÚËĸö²éѯµÄÓû§£¬¶ø×îºóÒ»¸ö²éѯµÄÓû§½ö¶ÔÔÚ Mall ÄÚ²¿µÄ·¹µê¸ÐÐËȤ¡£²éѯ½âÎö¿ÉÄÜÏà²îÉõÔ¶£¬ÒòΪÃèÊöÓëλÖõĹØÏµºÜ¸´ÔÓ£¬¸üºÎ¿ö»¹´æÔÚÆ´Ð´´íÎó¡¢ÓïÑÔÆçÒåºÍ²»Á¼Êý¾ÝµÈ¡£

ËäÈ»µØÀí±àÂëºÜ¸´ÔÓ£¬µ«ÊÇ¿ÉÒÔʹÓ÷þÎñÀ´½«µØÖ·×ª»»³ÉλÖá£Á½ÖÖ³£ÓõķþÎñΪ Google Maps ¹«¹² API ºÍ GeoNames£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£²»ÐÒµÄÊÇ£¬Ê¹ÓÃÕâЩ Web ·þÎñ±ØÐë×ñѭʹÓÃÌõ¿î£¨Í¨³£´øÓÐijЩÏÞÖÆ£©ºÍÍøÂçÁ÷Á¿¡£¶ÔÓÚÏÖʵµÄÉú²úϵͳ£¬Äú×îºÃ×Ô¼ºÊµÏÖÕâЩ¹¦ÄÜ¡£¾¡¹ÜʵÏÖÕâЩ¹¦Äܳ¬³öÁ˱¾Îĵķ¶Î§£¬µ«Ò»¶¨Òª¼Çס GeoNames Êý¾ÝºÍÆäËûÐí¶à¿Õ¼ä×ÊÔ´ÊÇ¿ÉÒÔÍêÈ«Ãâ·ÑÏÂÔØµÄ£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£ÓÐÁ˺õÄ×ÊÔ´Ö®ºó£¬×îºÃ´Ó»ù´¡¿ªÊ¼»ýÀÛ£¨µØÖ·¡¢³ÇÊкÍÖÝ£©£¬È»ºóÔÙÌí¼ÓÂÃÓξ°µãºÍ½¡×³µÄÒì³£´¦Àí¡£Ëæ×Åʱ¼äµÄÍÆÒÆ£¬ÄúµÄ²éѯ¼Ç¼½«Äܹ»´´½¨½¡×³µÄ²éѯ½âÎöÆ÷£¬×ãÒÔÓ¦¸¶Óû§µÄ¸÷ÖÖÊäÈë¡£²»¹ÜÊÇʲôËÑË÷Ó¦ÓóÌÐò£¬Á¼ºÃµÄ²Â²âºÍÇëÇóÓû§Ö¤Êµ²Â²â½á¹û¶¼ÊǺÃʵ¼ù£¬Èç ͼ 2 µÄ Google Maps ½ØÆÁËùʾ£º

ͼ 2. ÔÚ Google Maps ÉϵÄÁ¼ºÃ²Â²âºÍÇëÇóÓû§Ö¤Êµ²Â²â½á¹û

¶ÔÓÚ±¾ÎÄ£¬ÎÒ½«Õ¹Ê¾Ê¹Óà GeoNames ·þÎñ²¢¾ßÓÐһЩÆäËûÌØÐԵĻù´¡²éѯ½âÎöÆ÷£¬µ«Éú³É°æ±¾µÄ½âÎöÆ÷½«Áô¸øÓû§ÊµÏÖ¡£ÖÁ´Ë£¬ÄúÓ¦¸Ã¾ß±¸ÁË×ã¹»µÄ±³¾°ÖªÊ¶£¬¿ÉÒÔ½øÈëÖ÷ÌâÁË¡£±¾ÎĺóÃæµÄÄÚÈݽ«¹Ø×¢ÈçºÎʹÓà Lucene ºÍ Solr Ϊ¿Õ¼äÐÅÏ¢½¨Á¢Ë÷Òý²¢ËÑË÷ËüÃÇ¡£

°²×°ÑùÀý´úÂë

ÒªÔËÐÐÑùÀý´úÂ룬ÄúÐèÒª°²×°ÒÔÏÂÈí¼þ£º

JDK 1.5 »ò¸ü¸ß°æ±¾

Ant 1.7 »ò¸ü¸ß°æ±¾

×îÐ嵀 Web ä¯ÀÀÆ÷£¬±ÈÈç Firefox

Äú»¹ÐèÒª±¾ÎÄÌṩµÄÑùÀý´úÂ루²Î¼û ÏÂÔØ£©£¬Ëü°üº¬ Apache Solr ¼°ÆäËùÒÀÀµµÄÈí¼þ¡£×ñÑ­ÒÔϲ½Öè°²×°ÑùÀý´úÂ룺

1.unzip sample.zip

2.cd geospatial-examples

3.ant install

4.Æô¶¯ Solr£º ant start-solr£¨ÒÔºóҪֹͣ Solr£¬ÔËÐÐ ant stop-solr£©

5.ÔÚä¯ÀÀÆ÷ÖзÃÎÊ http://localhost:8983/solr/admin ²¢È·ÈÏ Solr Õý³£ÔËÐС£ÄúÓ¦¸Ã¿´µ½Ò»¸ö´øÓвéѯ¿òµÄ»ù´¡¹ÜÀíÔ±½çÃæ¡£

°²×°ºÃ Solr ²¢Õý³£ÔËÐÐÖ®ºó£¬¾Í¿ÉÒÔÔÚ Lucene ÖпªÊ¼´¦Àí¿Õ¼äÊý¾ÝÁË¡£ÔËÐа²×°²½Ö轫ÏÂÔØÒ»Ð©À´×Ô OSM ÏîÄ¿µÄÑùÀý´úÂ룬ÎÒÔÚ http://people.apache.org/~gsingers/spatial/ ÉϽéÉÜÁ˸ÃÏîÄ¿¡£¶ÔÓÚ±¾ÎÄ£¬ÎÒ°üº¬ÁËÀ´×ÔÃÀ¹úµÄ 4 ¸öλÖõÄÑùÀý OSM Êý¾Ý£¨ÔÚÎļþÖÐÁгöÁ˵½ OSM µÄÓÀ¾ÃÁ´½Ó£©£º

Syracuse, N.Y.

Downtown Minneapolis, Minn.

Around the Mall of America in Bloomington, Minn.

Downtown Charleston, S.C.

ΪÁËÑÝʾ±¾ÎĽéÉܵÄÐí¶à¸ÅÄÎÒ±àд´úÂëÀ´ÔÚ Solr ÖÐΪ OSM ½¨Á¢Ë÷Òý£¬²¢½«Ò»Ð©¼òµ¥µÄÊÂʵÓëÌØ¶¨µÄλÖÃÏà¹ØÁª£¨ÀýÈ磬²é¿´Êý¾ÝĿ¼ÖÐµÄ syracuse.facts Îļþ£©¡£ÕâÑù×öµÄÄ¿µÄÊÇչʾÈçºÎºÏ²¢·Ç½á¹¹»¯Îı¾ºÍ¿Õ¼äÊý¾Ý£¬ÒÔ´´½¨¸ßЧµÄËÑË÷Ó¦ÓóÌÐò¡£´ËÍ⻹ҪעÒ⣬ÎÒʹÓà Solr 1.5-dev °æ±¾£¨Solr µÄµ±Ç°¿ª·¢Ö÷¸É£©£¬¶ø²»ÊÇ×î½ü·¢²¼µÄ Solr 1.4¡£

ÔÚ Lucene ÖÐΪ¿Õ¼äÊý¾Ý½¨Á¢Ë÷Òý

Lucene 2.9 Ìí¼ÓÁËÁ½¸öÔÚ¿Õ¼äËÑË÷·½ÃæÆðµ½ÖØ´ó×÷ÓõÄÐÂÌØÐÔ¡£Ê×ÏÈ£¬Lucene ʵÏÖÁ˸üºÃµÄÊý×Ö·¶Î§²éѯºÍ¹ýÂ˹¦ÄÜ£¬ËüÃÇͨ³£ÓÃÔÚÏÞ¶¨¿ò·½·¨ÖС£Æä´Î£¬Lucene ÓÐÒ»¸öÐµĹ±Ï×Èí¼þ£¨contrib£©Ä£¿é£¬Ëü°üº¬ÒÔǰ³ÆÎª Local Lucene µÄ¶ÀÁ¢ÏîÄ¿£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡££¨¸Ã´úÂëλÓÚ Lucene µÄ contrib/spatial£»ÎÒÒѾ­ÔÚ ÑùÀý´úÂë Öаüº¬ÁË JAR Îļþ£©¡£¿Õ¼ä¹±Ï×Èí¼þΪ´´½¨µÑ¿¨¶ù²ãºÍ Geohash ´úÂëÌṩ¹¤¾ß£¬²¢ÇÒΪ´´½¨ Lucene ²éѯºÍ¹ýÂËÆ÷¶ÔÏóÌṩ¹¤¾ß¡£

Ôڲ鿴ΪÊý¾Ý½¨Á¢Ë÷ÒýµÄ´úÂë֮ǰ£¬ÄúÐèÒªÆÀ¹ÀÈçºÎÓëÊý¾Ý½»»¥ÒÔ¼°ÄúµÄÓ¦ÓóÌÐòÐèÒª´¦Àí¶àÉÙÊý¾Ý£¬Õâ·Ç³£ÖØÒª¡£ÀýÈ磬¶ÔÓÚ´ó¶àÊýÓµÓÐÉÙÁ¿»òÖеȳ̶ÈÎĵµÊýÁ¿£¨ÉÙÓÚ 1000 Íò£©µÄÈ˶øÑÔ£¬ÎªÎ³¶ÈºÍ¾­¶È´´½¨Ë÷ÒýºÍʹÓüòµ¥µÄÊý×Ö·¶Î§²éѯ¿ÉÒԵõ½ÓÅÒìµÄÐÔÄÜ¡£µ«ÊǶÔÓÚÊý¾ÝÁ¿¸ü´óµÄÓ¦ÓóÌÐò£¬¾ÍÐèÒª×ö¸ü¶àµÄ¹¤×÷£¨±ÈÈçÌí¼ÓµÑ¿¨¶û²ã£©À´¼õÉÙ´Ê»ãµÄÊýÁ¿ºÍÐèÒª¹ýÂ˺ͼǼµÄÎĵµ¡£´ËÍ⣬¿¼ÂÇʹÓÃʲô¸ñʽ´¢´æÐÅÏ¢Ò²ºÜÖØÒª¡£Ðí¶à¿Õ¼ä¾àÀëËã·¨ÒªÇó²ÉÓÃÒÔ»¡¶È±íʾµÄÊý¾Ý£¬¶øÆäËûËã·¨ÔòÒªÇóʹÓÃÒԶȱíʾµÄÊý¾Ý¡£Òò´ËÔÚ½¨Á¢Ë÷Òýʱ½«Î³¶È/¾­¶Èֵת»»³É»¡¶ÈÊÇÖµµÃµÄ£¬´Ó¶ø±ÜÃâÔÚÿ´ÎËÑË÷¶¼Ö´ÐÐת»»¡£µ±È»£¬Èç¹ûÄúÐèÒª±£ÁôÁ½ÖÖ¸ñʽµÄÊý¾Ý£¬ÔòÒâζ×ÅÐèÒª¸ü¶àµÄ¿Õ¼ä£¨´ÅÅÌ£¬ÉõÖÁÄڴ棩¡£×îºó£¬ÄúÊDz»ÊǶÔλÖÃÌØÐÔ½øÐзÖÀà¡¢ÅÅÐòºÍ¼Ç¼£¬¶ø²»Êǽö½«ËüÃÇÓÃÓÚ¹ýÂË£¿Èç¹ûÊÇÕâÑù£¬ÄÇô½«ÐèÒª½»ÌæÊ¹Óò»Í¬µÄ±íʾ¡£

Lucene ºÍ Solr

¾¡¹ÜÎÒʹÓà Solr ģʽÀ´Õ¹Ê¾ÐèÒª½¨Á¢Ë÷ÒýµÄ×ֶΣ¬ÕâÀïµÄËùÓиÅÄîÔÚ Lucene Öж¼ÊÇ¿ÉÓõġ£ÀýÈ磬Lucene 2.9.1 ÖÐµÄ tdouble ʵ¼ÊÉϾÍÊǾ«¶ÈΪ 8 µÄ NumericField¡£

ÒòΪ±¾ÎĽöÑÝʾ¸ÅÄî¶øÃ»Óп¼ÂÇÉú²úʹÓã¬ËùÒÔÎÒ½«ÓÃһЩ Java ´úÂëÔÚͬһ¸öµØ·½ÏÔʾÈçºÎΪ Geohash¡¢µÑ¿¨¶û²ã´´½¨Ë÷Òý¡£ÎÒÒѾ­ÔÚ Solr ģʽÖж¨ÒåÁËÐí¶àÖµ£¨Ä£Ê½µÄλÖÃΪ geospatial-examples/solr/conf/schema.xml£©À´²¶×½ OSM Êý¾Ý¡£Çåµ¥ 1 ÏÔʾÁËÓÃÓÚ±íʾλÖõÄÖ÷Òª×ֶΣº

Çåµ¥ 1. ÑùÀý Solr ģʽ

<!-- Latitude -->
<field name="lat" type="tdouble" indexed="true" stored="true"/>
<!-- Longitude -->
<field name="lon" type="tdouble" indexed="true" stored="true"/>
<!--
lat/lon in radians
In a real system, use a copy field for these instead of sending over the wire -->
<field name="lat_rad" type="tdouble" indexed="true" stored="true"/>
<field name="lon_rad" type="tdouble" indexed="true" stored="true"/>
<!-- Hmm, what about a special field type here? -->
<field name="geohash" type="string" indexed="true" stored="true"/>
<!-- Elevation data -->
<field name="ele" type="tfloat" indexed="true" stored="true"/>
<!-- Store Cartesian tier information -->
<dynamicField name="tier_*" type="double" indexed="true" stored="true"/>

ÎÒ½«Î³¶È/¾­¶ÈÖµ´æ´¢Îª tdouble ×ֶΡ£Ò»¸ö tdouble ¾ÍÊÇÔÚÄÚ²¿Ê¹Óà Trie ½á¹¹±íʾµÄÒ»¸ö double¡£Lucene ¿ÉÒÔʹÓÃËüÀ´´ó´ó¼õÉÙÔÚ·¶Î§¼ÆËãÆÚ¼äÐèÒª¼ÆËãµÄ´Ê»ãµÄÊýÁ¿£¬¾¡¹Üʵ¼ÊÉÏËüÏòË÷ÒýÌí¼ÓÁ˸ü¶à´Ê»ã¡£ÎÒ½« Geohash ´¢´æÎªÒ»¸ö¼òµ¥µÄ string£¨Î´·ÖÎö£©ÒòΪÎÒ½öÐèÒªËüµÄ¾«È·Æ¥Åä¡£Ñϸñ¶øÑÔ£¬ÎÒ½øÐеÄÕâЩ¼ÆËãÓò»µ½º£°Î£¬µ«ÎÒ½«Ëü´¢´æÎª tfloat£¬ËüÊÇ´æ´¢ÔÚ Trie ½á¹¹ÖÐµÄ float¡£×îºó£¬tier_* ¶¯Ì¬×Ö¶ÎÔÊÐíÓ¦ÓóÌÐò¶¯Ì¬µØÌí¼ÓµÑ¿¨¶û²ã×ֶΣ¬¶ø²»ÐèÒªÌáǰÉùÃ÷ËüÃÇ¡£ÖÁÓÚË÷Òý¹ý³Ì²¶×½µÄÆäËûÔªÊý¾Ý×ֶΣ¬ÎÒ½«Áô¸ø¶ÁÕß̽Ë÷¡£

¸ºÔðΪÊý¾Ý´´½¨Ë÷ÒýµÄ´úÂëλÓÚ sample.zip µÄ source Ê÷ÖС£Driver ÀàÊÇÒ»¸öÓÃÓÚÆô¶¯Ë÷Òý¹ý³ÌµÄÃüÁîÐÐʵÓóÌÐò£¬µ«Êµ¼ÊµÄË÷Òý¹ý³Ì·¢ÉúÔÚÃûΪ OSMHandler µÄʵÏÖµÄ SAX ContentHandler ²¿·Ö¡£ÔÚ OSMHandler ´úÂëÄÚ²¿£¬×î¹Ø¼üµÄ´úÂëÐÐÊÇ startElement() ·½·¨¡£ÎÒ½«Ëü·Ö³É 3 ¸ö²¿·Ö¡£µÚÒ»¸öÀý×Ó£¨¼ûÇåµ¥ 2£©ÒÔ double µÄÐÎʽΪγ¶ÈºÍ¾­¶È½¨Á¢Ë÷Òý£¬²¢½«ËüÃÇת»»³É¿ÉÒÔË÷ÒýµÄ»¡¶È£º

Çåµ¥ 2. γ¶È/¾­¶ÈµÄÑùÀýË÷Òý

//... current is a SolrInputDocument
double latitude = Double.parseDouble(attributes.getValue("lat"));
double longitude = Double.parseDouble(attributes.getValue("lon"));
current.addField("lat", latitude);
current.addField("lon", longitude);
current.addField("lat_rad", latitude * TO_RADS);
current.addField("lon_rad", longitude * TO_RADS);

Ϊγ¶È/¾­¶È½¨Á¢Ë÷Òý·Ç³£¼òµ¥¡£½ÓÏÂÀ´£¬ÎÒΪγ¶È/¾­¶È¶ÔË÷Òý Geohash Öµ£¬ÈçÇåµ¥ 3 Ëùʾ£º

Çåµ¥ 3. ÑùÀý Geohash Ë÷Òý

//...
//See http://en.wikipedia.org/wiki/Geohash
String geoHash = GeoHashUtils.encode(latitude, longitude);
current.addField("geohash", geoHash);

ÔÚÇåµ¥ 3 µÄ Geohash ´úÂëÖУ¬ÎÒʹÓÃËæ Lucene ¿Õ¼ä contrib °ü¸½´øµÄ GeoHashUtils.encode()£¨ÓÐÒ»¸öµÈЧµÄ decode() ·½·¨£©·½·¨½«Î³¶È/¾­¶È¶Ôת»»³ÉÒ»¸ö Geohash ×Ö·û´®£¬È»ºóÔٰѸÃ×Ö·û´®Ìí¼Óµ½ Solr¡£×îºó£¬ÎªÁËÌí¼ÓµÑ¿¨¶û²ã£¬ÎÒÔÚ OSMHandler ´úÂëÖÐÍê³ÉÁËÁ½¼þÊÂÇ飺

ÎÒÔÚ¹¹ÔìÆ÷Öд´½¨ CartesianTierPlotter ÀàµÄ n ¸öʵÀý£¬Ã¿¸öÐèÒª½¨Á¢Ë÷ÒýµÄ²ãÒ»¸ö¡£

ÔÚ startElement() ·½·¨ÖУ¬ÎÒ±éÀúËùÓÐ n ¸öÃè»æÆ÷£¬²¢ÎªÃ¿¸ö°üº¬µ±Ç° OSM ÔªËØµÄγ¶ÈºÍ¾­¶ÈµÄÿ¸öÍø¸ñÔªËØ»ñÈ¡±êʶ·û¡£¸Ã´úÂëÈçÇåµ¥ 4 Ëùʾ£º

Çåµ¥ 4. µÑ¿¨¶û²ãµÄÑùÀýË÷Òý

//...
//Cartesian Tiers
int tier = START_TIER; //4
//Create a bunch of tiers, each deeper level has more precision
for (CartesianTierPlotter plotter : plotters)
{current.addField("tier_" + tier, plotter.getTierBoxId(latitude, longitude));
tier++;
}

Ò»°ãÇé¿öÏ£¬²éѯһ´Î½öÐèËÑË÷Ò»¸ö²ã£¬Òò´ËÓµÓжà¸ö²ãͨ³£²»»áÔì³ÉÈκÎÎÊÌâ¡£ÄúÓ¦¸Ã¸ù¾ÝËÑË÷ËùÐèµÄÁ£¶ÈÀ´Ñ¡Ôñ²ãÊý¡£Èç¹ûÄú»¨Ê±¼ä²é¿´Ê£ÓàµÄË÷Òý´úÂ룬½«¿´µ½ÎÒÌí¼ÓÁËÐí¶àÓë OSM ÎļþÖеÄÊý¾ÝµãÏà¹ØµÄÆäËûÔªÊý¾ÝÖµ¡£ÎÒÏÖÔÚ½öΪÁ½ÖÖ OSM Êý¾ÝÀàÐͽ¨Á¢Ë÷Òý£º½çµã£¨node£© ºÍ·Ïߣ¨way£©¡£½çµãÊÇÌØ¶¨µÄγ¶ÈºÍ¾­¶ÈÉϵÄÒ»¸öµã£¬¶øÂ·ÏßÊÇËùÓÐÔÚijÖ̶ֳÈÉÏÏà¹ØµÄ½çµãµÄ¼¯ºÏ£¬±ÈÈç½ÖµÀ£¨²Î¼û ²Î¿¼×ÊÁÏ ÖÐµÄ OSM Data Primitives Á´½Ó¸ü¶àµØÁ˽â OSM Îļþ£©¡£

ʲôÊÇ CartesianTierPlotter£¿

CartesianTierPlotter µÄ¹¤×÷ÊǶԵØÇò½øÐÐͶӰ£¨ÔÚÎÒµÄÀý×ÓÖУ¬ÎÒʹÓÃÕýÏÒÇúÏßͶӰ£»²Î¼û ²Î¿¼×ÊÁÏ£©ºÍγ¶È/¾­¶ÈÐÅÏ¢£¬½«Æäת»»³É²ãϵͳËùʹÓõÄÍø¸ñ£¬²¢ÇÒ¸øÃ¿¸öÍø¸ñÒ»¸öΨһµÄºÅÂë¡£ÔÚËÑË÷ʱ£¬Ó¦ÓóÌÐò¾Í¿ÉÒÔͨ¹ýÖ¸¶¨Íø¸ñ ID À´ÏÞÖÆËÑË÷·¶Î§¡£

ÄúÒѾ­Á˽ⴴ½¨°üº¬¿Õ¼äÐÅÏ¢µÄ Solr ÎĵµµÄ»ù´¡ÖªÊ¶£¬½ÓÏÂÀ´½«½øÐÐʵ¼ù¡£Driver Àà½ÓÊÕÊý¾ÝºÍÊÂʵÎļþÒÔ¼°ÔËÐÐ Solr µÄ URL£¬²¢½«¸Ã¹¤×÷ת½»¸ø OSM2Solr Àà¡£OSM2Solr ÀཫʹÓà Solr µÄ Java ¿Í»§¶Ë SolrJ À´½ÓÊÕ OSMHandler SAX ½âÎöÆ÷´´½¨µÄÎĵµ£¬²¢½«ËüÃÇÅúÁ¿·¢Ë͵½ Solr ·þÎñÆ÷¡£Äú¿ÉÒÔÔÚÃüÁîÐÐÔËÐÐ Driver À࣬»òÕßÖ»ÐèÔËÐÐ ant index£¬Èà Ant Íê³ÉÔËÐÐÇý¶¯³ÌÐòËùÐèµÄ¹¤×÷¡£Íê³É¸Ã²½ÖèÖ®ºó£¬ÔÚä¯ÀÀÆ÷ÖзÃÎÊ http://localhost:8983/solr/select/?q=*:* ²¢È·ÈÏ Solr ÕÒµ½ 68,945 ¸öÎĵµ¡£»¨Ð©Ê±¼äϸ¶Á·µ»Øµ½½á¹û£¬ÊìϤÆäÖаüº¬µÄÄÚÈÝ¡£

´¦Àí OSM Êý¾ÝµÄ·½·¨·Ç³£¶à£¬ÎÒÔÚÕâÀï½ö½éÉÜÁËһЩ£¬²»¹ý£¬ÎÒÃÇÓ¦¸ÃÌÖÂÛÈçºÎÔÚÓ¦ÓóÌÐòÖÐʹÓÃÕâЩÊý¾ÝÁË¡£

¸ù¾ÝλÖýøÐÐËÑË÷

ÔÚ°ÑÊý¾ÝÌí¼Óµ½Ë÷ÒýÖÐÖ®ºó£¬ÎÒÃǽ«ÖØÎÂʹÓÃÊý¾ÝµÄ¸÷ÖÖ·½Ê½¡£ÎÒ½«ÑÝʾÈçºÎ¸ù¾ÝË÷ÒýÖеĿռäÐÅÏ¢¶ÔÎĵµ½øÐÐÅÅÐò¡¢ÔöÇ¿ºÍ¹ýÂË¡£

Óë¾àÀëÏà¹ØµÄ¼ÆËã

¸ù¾Ý¾àÀëÔöÇ¿ÎĵµºÍ¶ÔÎĵµ½øÐÐÅÅÐòÊÇÐí¶à¿Õ¼äÓ¦ÓóÌÐòµÄ³£¼ûÒªÇó¡£ÎªÁËʵÏÖ¸ÃÄ¿µÄ£¬Lucene ºÍ Solr °üº¬¼¸¸öÓÃÓÚ¼ÆËã¾àÀëµÄ¹¦ÄÜ£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£Lucene °üº¬¸ù¾Ý´óÔ²£¨Haversine£©¹«Ê½¼ÆËã¾àÀëµÄ¹¤¾ß£¨²Î¼û DistanceUtils ºÍ DistanceFieldComparatorSource£©£¬¶ø Solr °üº¬¼¸¸öÓÃÓÚ¼ÆËã¾àÀëµÄ FunctionQuery º¯Êý£º

´óÔ²£¨Haversine ºÍ Geohash Haversine£©

Euclidean ºÍ Squared Euclidean

Manhattan ºÍÆäËû p-norm

ʹÓà Solr µÄ¾àÀ뺯Êý¸ù¾Ý¾àÀëÔöÇ¿Êý¾ÝÊǷdz£ÈÝÒ׵ġ£ÎÒ½«¹Ø×¢ Solr µÄº¯Êý²éѯ£¬ÒòΪËüÃÇÊÇ×îÈÝÒ×ʹÓõIJ¢ÇÒ²»ÐèÒª±à³Ì¡£¿ÉÒÔÔÚ Lucene ÖÐÇáËɵØÊ¹ÓÃËüÃÇ£¬»òÕßÇáËɵؽ«ËüÃÇÒÆÖ²µ½ Lucene¡£

ÈçǰËùÊö£¬ÎÒÉèÖÃÁ˼¸¸ö×Ö¶ÎÀ´´¢´æ OSM Êý¾Ý£¬°üÀ¨ lat/lon¡¢lat_rad/lon_rad ºÍ geohash¡£È»ºó£¬ÎҾͿÉÒÔËÑË÷ºÍÔöÇ¿ÕâЩֵ£º

hsin£¨´óÔ²£©£ºhttp://localhost:8983/solr/select/?q=name:Minneapolis 
AND _val_:"recip(hsin(0.78, -1.6, lat_rad, lon_rad, 3963.205), 1, 1, 0)"^100
dist£¨Euclidean£¬Manhattan£¬p-norm£©£º http://localhost:8983/solr/select/?q=name:Minneapolis AND _val_:"recip(dist(2, lat, lon, 44.794, -93.2696), 1, 1, 0)"^100
sqedist£¨Squared Euclidean£©£º http://localhost:8983/solr/select/?q=name:Minneapolis AND _val_:"recip(sqedist(lat, lon, 44.794, -93.2696), 1, 1, 0)"^100
ghhdist£¨Geohash Haversine£©£º http://localhost:8983/solr/select/?q=_val_:"recip (ghhsin(geohash(44.79, -93), geohash, 3963.205), 1, 1, 0)"^100

¶ÔÓÚÒÔÉÏÿÖÖÇé¿ö£¬ÎÒ½«Ò»¸ö¹Ø¼ü×Ö²éѯÓëÒ»¸ö»ùÓÚ¾àÀëµÄ FunctionQuery ½áºÏÆðÀ´£¬Éú³ÉÒ»¸ö°üº¬¹Ø¼ü×ּǼºÍ¾àÀë¼Ç¼µÄ½á¹û¼¯¡£Òª²é¿´ÕâЩ²¿·ÖµÄЧ¹û£¬ÇëΪÿ¸ö²éѯÌí¼ÓÒ»¸ö &debugQuery=true ²¢»¨Ð©Ê±¼äÀ´¼ì²é Solr Éú³ÉµÄ½âÊÍ¡£ÕâЩ½öÊÇËüÃǵÄÓÃÀý¡£Òª²é¿´ÍêÕûµÄÇ©ÃûºÍÎĵµÒÔ¼°ÆäËû FunctionQuery º¯Êý£¬Çë²Î¼û ²Î¿¼×ÊÁÏ¡£µ±È»£¬Äú¿ÉÒÔÑ¡ÔñÔöǿijЩ²¿·Ö£¬»òÕ߸ù¾ÝÄúµÄÐèÇó½øÐиü¸Ä¡£

ÖÁÓÚ¸ù¾Ý¾àÀë½øÐÐÅÅÐò£¬Solr Ìṩһ¸öÖ÷ҪѡÏÕâʵ¼ÊÉÏÊÇÒ»¸öÃÖ²¹·½·¨£¬ÒòΪ Solr ûÓиù¾Ýº¯Êý½øÐÐÅÅÐòµÄ¹¦ÄÜ£¬Ò²Ã»Óж¨Ò嶍֯µÄ FieldType¡£²»¹ý£¬ÕâÖÖ´ëÊ©·Ç³£¼òµ¥¡£Èç¹ûÒª¸ù¾Ýº¯Êý½øÐÐÅÅÐò£¬ÐèÒªÏñÉÏÃæÒ»Ñù´´½¨²éѯ£¬µ«Ôڹؼü×Ö×Ó¾äºóÃæÌí¼Ó 0£¬Èç q=name:Minneapolis^0 AND _val_:... Ëùʾ¡£Õ⽫µ¼Ö¹ؼü×Ö¼Ç¼Ϊ 0£¨µ«ÈÔÈ»·µ»ØÆ¥ÅäµÄ½á¹û£©£¬²¢ÇÒº¯ÊýÖµ½«ÊǼǼµÄΨһ×é³É²¿·Ö¡£´Ó³¤Ô¶¿´£¬Ï£Íû Solr Ìí¼Ó FieldType À´¸üºÃµØÖ§³ÖÅÅÐò£¬¶ø²»ÐèÇåÁãÖ÷Òª²éѯ¡£

Íê³ÉÁËÅÅÐòºÍ¼Ç¼֮ºó£¬ÎÒÃǽ«Ì½ÌÖ¹ýÂË¡£

¹ýÂË

ΪÁËʹÓà Solr ¸ù¾ÝλÖýøÐйýÂË£¬±í 1 ΪӦÓóÌÐòµÄ¼Ç¼Æ÷ÌṩÁË 3 ÖÖÖ÷ÒªµÄ»úÖÆÀ´ÏÞÖÆÎĵµ¿Õ¼ä£º

±í 1. ¹ýÂË·½·¨

¹ØÓÚÃܶȵļòҪ˵Ã÷

ÌØ¶¨·¶Î§µÄµãÃܶÈÔÚÓû§µÄËÑË÷ÌåÑé·½Ãæ°çÑÝ×ÅÖØÒªµÄ½ÇÉ«¡£ÀýÈ磬ΪŦԼµÄÂü¹þ¶ÙÌṩÉÌÒµËÑË÷µÄÓ¦ÓóÌÐòµÄµãÃܶȱÈΪÃ÷ÄáËÕ´ïÖݵIJ¼·¨ÂÞÌṩËÑË÷µÄÓ¦ÓóÌÐòµÄµãÃܶȴ󣨲μû ²Î¿¼×ÊÁÏ£©¡£ÊÂʵÉÏ£¬½«¸ÃÐÅÏ¢°üº¬µ½¹ýÂ˺¯ÊýÖÐÊǷdz£ÓÐÓõģ¬ÕâÈÃÓ¦ÓóÌÐòÄܹ»Ìôѡһ¸ö×îºÏÊʵľàÀ룬´Ó¶øÈ·±£ËÑË÷½á¹ûÊÇÁ¼ºÃµÄ¡£²»¹ý£¬ÑÝʾÈçºÎʵÏָùý³Ì³¬³öÁ˱¾ÎĵÄÌÖÂÛ·¶Î§¡£

ʲôÊÇ QParserPlugin£¿

QParserPlugin ÊÇ Solr ¶Ô²éѯ½âÎöÆ÷²å¼þÄ£¿éµÄ³Æºô¡£ºÍÐí¶à Solr ²¿·ÖÒ»Ñù£¬²éѯ½âÎöÆ÷ʵÏÖÒ²Êǿɲå°ÎµÄ¡£¶ÔÓÚ±¾ÎÄ£¬ÎÒʹÓà 3 Öв»Í¬µÄ²éѯ½âÎöÆ÷²å¼þ£¬ÆäÖÐÒ»¸öÊÇËæ Solr ¸½´øµÄ£¨ FunctionRangeQParserPlugin ({!frange})£©£¬ÓÐÁ½¸öÊÇÎÒ×Ô¼º±àдµÄ£ºCartesianTierQParserPlugin ({!tier}) ºÍ GeonamesQParserPlugin¡£ÕâÁ½¸ö²å¼þµÄÔ´´úÂëλÓÚÑùÀý´úÂëÏÂÔØµÄ src Ê÷ÖС£ÕâÁ½¸ö²å¼þÒѾ­Ê¹Óà solrconfig.xml ÎļþÔÚ Solr ÖнøÐÐÁËÅäÖãºÔÚ²éѯÖÐͨ¹ýÖ¸¶¨ {!parserName [parameters]}[query]£¨²ÎÊýºÍ²éѯ¿ÉÄÜÊÇ¿ÉÑ¡µÄ£©À´µ÷Óà QParserPlugin£¬¾ÍÏñÔÚ {!tier x=32 y=-79 dist=50 prefix=tier_} ºÍ {!frange l=0 u=400}hsin(0.57, -1.3, lat_rad, lon_rad, 3963.205) ÖÐÒ»Ñù¡£

ÄÄÖÖ·½·¨ÊʺÏÄúÄØ£¿ÕâÈ¡¾öÓÚµãµÄÃܶȣ¨²Î¼û ¹ØÓÚÃܶȵļòҪ˵Ã÷£©£¬µ«ÊÇÎÒÃǽ¨ÒéÊ×ÏȲÉÓüòµ¥µÄ·¶Î§·½·¨£¬È»ºóÔÚÐèÒªµÄʱºòÌáÉýµ½²ã·½·¨¡£¹Ø¼üÒòËØÊÇÿ´Î¼ÆË㷶ΧʱÐèÒª¼ÆËãµÄ´Ê»ãÊýÁ¿£¬ÒòΪÕâ¸öÊýÁ¿Ö±½Ó¿ØÖÆ Lucene ÐèÒª×ö¶àÉÙ¹¤×÷À´ÏÞÖÆ½á¹û¼¯¡£

Ò»¸ö¼òµ¥µÄ geonames.org ²éѯ½âÎöÆ÷

Ϊ¿Õ¼äÓ¦ÓóÌÐò¹¹½¨¹¦ÄÜÆëÈ«µÄ²éѯ½âÎöÆ÷³¬³öÁ˱¾Îĵķ¶Î§£¬·´Ö®£¬ÎÒ½«¹¹½¨Ò»¸ö¼òµ¥µÄ QParserPlugin£¬Ëü½«¸ºÔð´ÓÀ´×Ô GeoNames µÄλÖÃÐÅÏ¢»ñÈ¡½á¹û¡£Õâ¸ö½âÎöÆ÷¼ÙÉèÓ¦ÓóÌÐòÄܹ»Ìáǰ½«Óû§ÊäÈë·Ö³ÉÁ½²¿·Ö£º¹Ø¼ü×Ö²éѯºÍ¿Õ¼ä²éѯ¡£ÊÂʵÉÏ£¬Ðí¶à±¾µØ²éѯӦÓóÌÐò¶¼ÒªÇóÓû§Í¨¹ýÁ½¸öÊäÈë¿òÊäÈëÐÅÏ¢¡£

½âÎöÆ÷¿ÉÒÔ½ÓÊÜÒÔϼ¸¸ö²ÎÊý£º

topo£ºtoponym µÄËõд£¨²Î¼û GeoNames Îĵµ£©¡£ÔÚ GeoNames ÖÐËÑË÷µÄλÖᣱØÐè¡£

rows£º´Ó GeoNames »ñÈ¡µ½µÄÐÐÊý¡£¿ÉÑ¡¡£Ä¬ÈÏֵΪ 1¡£

start£º´ÓÆä¿ªÊ¼µÄ½á¹û¡£Ä¬ÈÏֵΪ 0¡£

lat£ºÔÚ FunctionQuery ÖÐÓÃ×÷ ValueSource µÄγ¶È×Ö¶ÎÃû¡£Èç¹ûÖ¸¶¨ÁËËü£¬±ØÐëÒ²ÉèÖà lon¡£

lon£ºÔÚ FunctionQuery ÖÐÓÃ×÷ ValueSource µÄ¾­¶È×Ö¶ÎÃû¡£Èç¹ûÖ¸¶¨ÁËËü£¬±ØÐëÒ²ÉèÖà lat¡£

gh£ºÔÚ FunctionQuery ÖÐÓÃ×÷ ValueSource µÄ Geohash ×Ö¶ÎÃû¡£Èç¹ûÖ¸¶¨ÁËËü£¬¾Í²»ÄÜ ÉèÖà lat/lon¡£

dist£ºÐèҪʹÓõľàÀ뺯Êý¡£String¡£[hsin, 0-Integer.MAX_VALUE, ghhsin] Ö®Ò»¡£Èç¹ûÖ¸¶¨ÁËÒ»¸ö geohash ×ֶΣ¬ÄÇô½«ºöÂÔ¸Ã×ֶΡ£ghhsin ÊÇ×Ô¶¯µÄ¡£2-norm (Euclidean) µÄĬÈÏֵΪ 2¡£

unit - KM|M£ºÐèҪʹÓõĵ¥Î»£¬KM ±íʾ¹«ÖÆ£¬M ±íÊ¾Ó¢ÖÆ¡£Ä¬ÈÏֵΪ M¡£

boost - float£ºÔöÇ¿º¯Êý²éѯµÄÁ¿¡£Ä¬ÈÏֵΪ 1¡£

Õâ¸öÀý×ӵĴúÂë°üº¬ÔÚÑùÀý´úÂëÏÂÔØµÄ GeonamesQParserPlugin.java ÎļþÖС££¨ÏÂÔØÖаüº¬µÄ Solr °æ±¾ÖÐµÄ Solr ·þÎñÆ÷ÒѾ­ÅäÖúã©¡£µ÷ÓÃËüÓëµ÷ÓÃÉÏÃæµÄ CartesianTierQParserPlugin ÀàËÆ¡£ÀýÈ磬ҪÔÚË÷ÒýÖÐËÑË÷Ã÷ÄáËÕ´ïÖÝ Bloomington ¸½½üµÄ¹ºÎïÖÐÐÄ£¬ÎÒ½«Ê¹Óà http://localhost:8983/solr/select/?q=text:mall AND _query_:"{!geo topo='Bloomington, MN' lat=lat_rad lon=lon_rad dist=hsin}"¡£

ͨ¹ý²ÉÓà QParserPlugin ·½·¨£¬ÎÒÄܹ»¹Ø×¢¶ÔÎÒ¶øÑԷdz£ÖØÒªµÄÓï·¨£¬¶øÇÒÔÚλÖ÷½ÃæÈÔÈ»ÔÊÐí¼ÌÐøÊ¹ÓÃËùÓлùÓÚÎı¾µÄ²éѯ½âÎö¹¦ÄÜ¡£
´ÓÏÖÔÚ¿ªÊ¼£¬¿ÉÒÔ´ó´óµØÀ©Õ¹ GeonamesQParserPlugin£¬½«ÆäÓëÓÊÕþ±àÂëºÍÐí¶àÆäËûλÖù淶һÆðʹÓᣵ±È»£¬Ëü»¹ÐèÒª¸ü¶àµÄ´íÎó´¦Àí£¬²¢ÇҺܿÉÄÜÐèҪת»»ÎªÊ¹Óà GeoNames Êý¾Ý¼¯£¨²Î¼û ²Î¿¼×ÊÁÏ£©£¬´Ó¶øÊ¹Æä²»ÒÀÀµÓÚ Web ·þÎñ¡£Solr ÔÚΪÎÊÌâ¸ú×ÙÆ÷»ñÈ¡¸ü¶àµÄ¿Õ¼ä²éѯ½âÎöÆ÷Ö§³Ö·½Ã滹´æÔÚ¿ªÔ´ÎÊÌ⣨²Î¼û ²Î¿¼×ÊÁÏ£©¡£

½áÊøÓï

ÖÁ´Ë£¬ÎÒÒѾ­ÑÝʾÁË Lucene ºÍ Solr ¸ù¾Ý»ùÓÚµãµÄλÖÃÄ£ÐÍËÑË÷¡¢ÅÅÐòºÍ¹ýÂËÎı¾ÎĵµµÄ¹¦ÄÜ¡£½ÓÏÂÀ´£¬½«ÒªÊµÏÖÒ»¸öÕæÊµµÄλÖÃËÑË÷Ó¦ÓóÌÐòÀ´´¦ÀíÓû§²éѯºÍ³ÊÏÖËÑË÷½á¹û¡£²¿·Ö¹ØÓÚÓ¦ÓóÌÐòµÄÉìËõÐÔµÄÎÊÌâ¿ÉÒÔ´Ó´´½¨ÏÞ¶¨¿ò¹ýÂËÆ÷ʱÐèÒª¼ÆËãµÄ´Ê»ãÁ¿ÕÒµ½´ð°¸¡£³ýÁ˹ØÓÚÉìËõÐԵĹýÂËÆ÷ÎÊÌâÖ®Í⣬»¹ÐèÒª¿¼ÂÇÆäËûÓëËÑË÷Ïà¹ØµÄÒòËØ£¬±ÈÈçÊÇ·Ö·¢Ë÷Òý»¹Êǽö¸´ÖÆË÷Òý¡£Çë²Î¼û Lucene ºÍ Solr ²Î¿¼×ÊÁÏ¡£

Èç¹ûÄú¶Ô¹¹½¨¸ü¼Ó¸ß¼¶µÄ GIS Ó¦ÓóÌÐò¸ÐÐËȤ£¬Äú½«ÐèҪΪ·Ïß²éÕÒ¡¢ÐÎ×´½»²æµÈÌí¼Ó¸ü¼Ó¸´ÔӵŦÄÜ¡£Èç¹ûÄúÐèÒª¹¹½¨Ò»¸ö¿É¿¿ËÑË÷Ó¦ÓóÌÐò£¬ÓÃÓںϲ¢»ùÓÚµãµÄλÖõĽṹºÍ·Ç½á¹¹»¯Îı¾£¬ÄÇô¹Ø×¢ Lucene ºÍ Solr ¾Í×ã¹»ÁË¡£

   
2749 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

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

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

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

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¼°ÆäÇ°ÑØ¼¼Êõ