Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Christoph Strobl on spring-data-solr
Search
Enterprise Java User Group Austria
September 25, 2013
Technology
0
200
Christoph Strobl on spring-data-solr
Enterprise Java User Group Austria
September 25, 2013
Tweet
Share
More Decks by Enterprise Java User Group Austria
See All by Enterprise Java User Group Austria
Gerrit Grunwald on What the CRaC... SUPERFAST JVM STARTUP
ejug
2
130
Spring Framework 5.2 - Core Container Revisited
ejug
0
150
Andreas Caternberg on Jenkins Pipelines
ejug
0
700
Martin Ahrer on Continuous Delivery Infrastructure With Docker
ejug
0
140
Dirk Mahler on Software Analyse mit jQAssistant & Neo4j
ejug
1
280
Christoph Strobl on Spring Data & Hypermedia
ejug
0
120
Stefan Armbruster on Graph Modelling Antipatterns
ejug
1
110
Stefan Armbruster on Introduction into Neo4J
ejug
1
85
Michael Nitschinger on Building a reactive Couchbase driver for the JVM
ejug
0
130
Other Decks in Technology
See All in Technology
直接メモリアクセス
koba789
0
250
Oracle Cloud Infrastructure:2025年11月度サービス・アップデート
oracle4engineer
PRO
2
170
AWS Bedrock AgentCoreで作る 1on1支援AIエージェント 〜Memory × Evaluationsによる実践開発〜
yusukeshimizu
4
270
計算機科学をRubyと歩む 〜DFA型正規表現エンジンをつくる~
ydah
3
130
Playwrightのソースコードに見る、自動テストを自動で書く技術
yusukeiwaki
12
4.3k
日本Rubyの会の構造と実行とあと何か / hokurikurk01
takahashim
4
800
著者と読み解くAIエージェント現場導入の勘所 Lancers TechBook#2
smiyawaki0820
11
5.4k
pmconf2025 - 他社事例を"自社仕様化"する技術_iRAFT法
daichi_yamashita
0
720
安いGPUレンタルサービスについて
aratako
2
2.6k
re:Invent2025 コンテナ系アップデート振り返り(+CloudWatchログのアップデート紹介)
masukawa
0
220
Noを伝える技術2025: 爆速合意形成のためのNICOフレームワーク速習 #pmconf2025
aki_iinuma
2
1.8k
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
410
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Producing Creativity
orderedlist
PRO
348
40k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.1k
Automating Front-end Workflow
addyosmani
1371
200k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
A better future with KSS
kneath
240
18k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Context Engineering - Making Every Token Count
addyosmani
9
480
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Embracing the Ebb and Flow
colly
88
4.9k
Transcript
Spring Data Solr I n t r o d u
c t i o n t o 2013-09-25, Christoph Strobl @eJUG, 48.299707,14.286896
Christoph Strobl Software Engineer Project Lead Spring Data Solr
[email protected]
@stroblchristoph https:/ /github.com/christophstrobl
Apache Solr ...in a hurry...
Apache Solr Enterprise Search Server Built on top of Lucene
Open Interfaces Multiple Collections Clusterable ...
Infrastructure Setup Solr
ZK Infrastructure Setup S1L S1R S2L S2R
ZK Infrastructure Setup S1L S1R S2L S2R
Inside Solr Cores Schema
Solr Schema Types Analysers Fields <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="lowercase" class="solr.TextField"> <analyzer> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory" /> </analyzer> </fieldType> <field name="name_ci" type="lowercase" indexed="true" stored="false"/>
Schemaless since 4.4
Connection HTTP SolrJ q=name:(spring data) AND type:solr&start=0&rows=10 new SolrQuery("name:(spring data)
AND type:solr") .setStart(0).setRows(10);
Solr Query public List<Product> findByNameOrDescription(String name, String description) { String
queryString = "name:" + ClientUtils.escapeQueryChars(name) + " OR description:" + ClientUtils.escapeQueryChars(description); try { SolrQuery query = new SolrQuery(queryString); query.setStart(0).setRows(0); QueryResponse response = solrServer.query(query); long totalValues = response.getResults().getNumFound(); query.setRows(Long.valueOf(totalValues).intValue()); return solrServer.query(query).getBeans(Product.class); } catch (SolrServerException e) { throw ExceptionTranslator.translate(e); } return Collections.emptyList(); }
Spring-Data-Solr
Spring-Data-Solr Spring Data offers serveral APIs around a common SPI
Integration with Apache Solr Community Project with support from pivotal
Connection HTTP SolrJ Spring Data Solr new SimpleQuery(new Criteria("name") .is("spring",
"data").and("type").is("solr") ).setPageRequest(new PageRequest(0, 10)); q=name:(spring data) AND type:solr&start=0&rows=10 new SolrQuery("name:(spring data) AND type:solr") .setStart(0).setRows(10);
Solr Template
SolrTemplate Product product = new Product("foo"); solrTemplate.saveBean(prodcut); solrTemplate.commit(); //... Product
recalled = solrTemplate.queryForObject( new SimpleQuery(new Criteria("id").is("foo")), Product.class); Page<Product> page = solrTemplate.queryForPage( new SimpleQuery(new SimpleStringCriteria("*:*"), Product.class); //... solrTemplate.deleteById("foo"); solrTemplate.commit();
Repository
Repository interface ProductRepository extends SolrCrudRepository<Product, String> { } Product product
= new Product("foo"); repo.save(product) //... Product recalled = repo.findOne("foo"); Page<Product> page = repo.findAll(); //... repo.delete(product);
Derived Queries
Derived Queries interface ProductRepository extends SolrCrudRepository<Product, String> { Page<Product> findByNameStartingWith(String
name, Pageable page); List<Product> findByNameOrDescription(@Boost(2) String name, String description); } Page<Product> page = repo.findByNameStartingWith("fo", new PageRequest(0,10)); List<Product> list = repo.findByNameOrDescription("foo", "foo");
/*Named*/ Queries
/*Named*/ Queries interface ProductRepository extends SolrCrudRepository<Product, String> { @Query("name:?0*") Page<Product>
findByNameStartingWith(String name, Pageable page); @Query(name="findByNameOrDescriptionBoostNameBy2") List<Product> findByNameOrDescription(String name, String description); }
Demo
Custom Repository
Faceting
Highlighting
Custom Types
Questions?
Thank you!