您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Spring-Boot集成Solr客戶端的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Spring-Boot集成Solr客戶端的示例分析”這篇文章吧。
Solr 是基于 Lucene 的全文檢索服務器,可配置、可擴展,并對索引和搜索性能進行了優化。Solr 多用于電子商務網站、門戶、論壇這類網站的站內搜索。Solr 可以獨立運行在 Jetty、Tomcat 等這些 Servlet 容器中。Solr 索引的實現非常簡單,用 POST 方法去向 Solr服務器發送一個描述 Field 及其內容的 JSON 文檔,Solr 根據 JSON 文件增刪改索引。Solr 搜索只需要發送 HTTP GET 請求,然后對 Solr 返回 JSON 格式的查詢結果進行解析,組織頁面布局。Solr 不提供構建 UI 的功能,Solr提供了一個管理界面,通過管理界面可以查詢 Solr 的配置和運行情況。
tips: IDEA的快速查找類快捷鍵 (連續按兩次 shift 鍵)
1) maven配置:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <properties> <spring.data.solr.version>2.1.1.RELEASE</spring.data.solr.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-solr</artifactId> <version>${spring.data.solr.version}</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <!--添加Web依賴, 使項目變成web項目--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-solr</artifactId> </dependency> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies>
2) SpringBoot 快速啟動
@SpringBootApplication @EnableAutoConfiguration public class AppMain { public static void main(String[] args) { SpringApplication.run(AppMain.class, args); } }
可能遇見的問題:
1. 一般spring-boot項目的啟動類都放在項目的根路徑下, 這樣可以不用配置@ComponentScan注解來掃描相應的類, 如果遇到無法讀取配置類屬性的情況, 首先考慮這個因素
3) 在resources下新建application.properties, 完成solr的基本配置
spring.data.solr.host=http://127.0.0.1:8983/solr
這個屬性配置的是solr服務器的訪問地址, 因為本項目是作為客戶端來訪問solr服務器, 所以不用做更多的配置
這個屬性是是通過@ConfigurationProperties("spring.data.solr")讀取出來的, 默認被讀取到 SolrProperties.class 中 詳情請使用類查找器查看該類
4) 新建一個Controller用來查詢Solr服務器數據
@RestController public class SolrController { @Autowired private SolrClient client; @RequestMapping("/") public String testSolr() throws IOException, SolrServerException { SolrDocument document = client.getById("test", "fe7a5124-d75b-40b2-93fe-5555512ea6d2"); System.out.println(document); return document.toString(); } }
數據是我提前導入的, 這里使用ID查詢結果SolrDocument{goodsId=[129831], id=fe7a5124-d75b-40b2-93fe-5555512ea6d2, _version_=1562570354094768128}
5) solr集成結束, 但問題來了
問題1: 為什么沒有配置SolrClient, 但卻自動注入成功了呢?
問題2: 它是在什么地方被注入到BeanFactory的? (@Autowired能夠注入成功說明該類存在于其中)
問題3: 能不能自己配置?
問題4: 有沒有必要自己配置?
6) 解決問題1, 和問題2:
SolrAutoConfiguration
是Solr自動配置的類, 在Spring-Boot啟動的時候會自動加載屬性, 注入SolrClient類
@Configuration @ConditionalOnClass({ HttpSolrClient.class, CloudSolrClient.class }) @EnableConfigurationProperties(SolrProperties.class) public class SolrAutoConfiguration { private final SolrProperties properties; private SolrClient solrClient; public SolrAutoConfiguration(SolrProperties properties) { this.properties = properties; } @Bean @ConditionalOnMissingBean public SolrClient solrClient() { this.solrClient = createSolrClient(); return this.solrClient; } private SolrClient createSolrClient() { if (StringUtils.hasText(this.properties.getZkHost())) { return new CloudSolrClient(this.properties.getZkHost()); } return new HttpSolrClient(this.properties.getHost()); } }
當我們引入
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-solr</artifactId> <version>${spring.data.solr.version}</version> </dependency>
這個自動配置就會因為我們在AppMain.java上配置的@EnableAutoConfiguration注解生效, 這樣就會自動注入Bean了
7) 解決問題3, 問題4
肯定是可以自己配置的, 配置方式也非常簡單
只需要自己編寫一個類, 使用@Configuration注解, 并且配置一個@Bean, 返回SolrClient就可以了
@Configuration public class SolrClientConfiguration { @Autowired private Environment environment; @Bean public SolrClient solrClient() { System.out.println("自定義配置SolrClient"); return new HttpSolrClient(environment.getRequiredProperty("spring.data.solr.host")); } }
啟動結果
2017-03-23 10:32:17.414 INFO 10359 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 自定義配置SolrClient 2017-03-23 10:32:18.178 INFO 10359 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@160f0c04: startup date [Thu Mar 23 10:32:15 CST 2017]; root of context hierarchy
也就是自定義配置完成
我建議不使用自定義的配置方式, 因為它原有的自動裝配已經非常方便了. 并且可以根據是否配置zookeeper來判斷使用單機版或者集群版.
現在能使用SolrClient了, 剩下的是需要封裝工具類, 完成客戶端的查詢和更新操作就OK了
以上是“Spring-Boot集成Solr客戶端的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。