| ͨ¹ýºÏ²¢·Ç½á¹¹»¯Îı¾ºÍ¿Õ¼äÊý¾Ý¸Ä½øËÑË÷Ó¦ÓóÌÐò
²»¹ÜÊÇͨ¹ýÖ§³Ö 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 ¾Í×ã¹»ÁË¡£
|