One: Configuration springdata-es
Elasticseach-jpa.xml
<?xml version= "1.0" encoding= "UTF-8"?>
<beans xmlns= "Http://www.springframework.org/schema/beans"
Xmlns:xsi= "Http://www.w3.org/2001/XMLSchema-instance"
xmlns:context= "Http://www.springframework.org/schema/context"
Xmlns:mvc= "Http://www.springframework.org/schema/mvc"
Xmlns:jpa= "HTTP://WWW.SPRINGFRAMEWORK.ORG/SCHEMA/DATA/JPA"
Xmlns:elasticsearch= "Http://www.springframework.org/schema/data/elasticsearch"
Xsi:schemalocation= "
Http://www.springframework.org/schema/beans
Http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
Http://www.springframework.org/schema/context
Http://www.springframework.org/schema/context/spring-context-4.3.xsd
Http://www.springframework.org/schema/mvc
Http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
Http://www.springframework.org/schema/data/jpa
Http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd
Http://www.springframework.org/schema/data/elasticsearch
Http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd
">
<context:component-scan base-package= "Com.sf.heros.mq.consumer"/> Scan Package
<elasticsearch:transport-client id= "Client" cluster-name= "Elasticsearch"
Cluster-nodes= "127.0.0.1:9300" client-transport-sniff= "false"/> Configure the link port (default is 9200, but we need to interact with it, to use the configuration file to write that port, Mine is 9300)
<elasticsearch:repositories base-package= "Com.sf.heros.mq.consumer.dao" Springdata Operation ES Interface class
elasticsearch-template-ref= "Elasticsearchtemplate"/>
<bean name= "Elasticsearchtemplate"
class= "Org.springframework.data.elasticsearch.core.ElasticsearchTemplate" >
<constructor-arg name= "Client" ref= "client"/> es operation class
</bean>
</beans>
2: Interface class
Userdao. Java (add-and-revise method is consistent with other springdata, findby, etc. syntax reference springdata)
Public interface Userdao extends elasticsearchrepository<user,integer> {
List<user> Findbyarticleinfid (Integer aid);
}
3: Entity class
@Document (IndexName = "Article_inf_index", type = "Articleinf")
@Setting (Settingpath = "Elasticsearch-analyser.json")
public class User implements Serializable {
Elasticsearch
@org. springframework.data.annotation.Id
Private Integer Articleinfid;
@Field (type = fieldtype.string)//Use Ngram for single word segmentation
Private String ArticleTitle;
@Field (type = fieldtype.date, store = true, format = dateformat.custom, pattern = "Yyyy-mm-dd HH:mm:ss")
@JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "Yyyy-mm-dd HH:mm:ss")
Private Date Releasetime;
Public Integer Getarticleinfid () {
return articleinfid;
}
public void Setarticleinfid (Integer articleinfid) {
This.articleinfid = Articleinfid;
}
Public String Getarticletitle () {
return articletitle;
}
public void Setarticletitle (String articletitle) {
This.articletitle = ArticleTitle;
}
Public Date Getreleasetime () {
return releasetime;
}
public void Setreleasetime (Date releasetime) {
This.releasetime = Releasetime;
}
@Override
Public String toString () {
Return "user{" +
"Articleinfid=" + Articleinfid +
", articletitle= '" + articletitle + "+
", releasetime=" + Releasetime +
‘}‘;
}
}
4:serverce
@Service ("Testservice")
public class Elasticsearchservice {
@Autowired
private Userdao Userdao;
public void Add (user user) {
Userdao.save (user);
Public list<user> Search (Integer aid) {
pageable pageable=new pageable () {
@Override
Public int getnumberofpages () {
return 0;
@Override
Public pageformat getpageformat (int pageIndex) throws Indexoutofboundsexcept Ion {
return null;
@Override
Public Printable getprintable (int pageIndex) throws Indexoutofboundsexceptio n {
return null;
}
};
Return This.userDao.findByArticleInfId (aid);
}
Public user searchbyquery (user user) {
Boolquerybuilder qb= querybuilders. Boolquery ();
Qb.must (Querybuilders.matchquery ("Articleinfid", 12));
Iterable<user> search = Userdao.search (QB);
Return Search.iterator (). Next ();
}
}
Boolquerybuilder Method:
1.matchAllQuery () Matchallquery () method to match all documents
2.matchQuery ("Filedname", "value") matches a single field, matching the document with the field named Filedname, value =
3.multiMatchQuery (Object text, String ... fieldnames) multiple fields match a value
QueryBuilder QueryBuilder = querybuilders.multimatchquery ("Music", "name", "interest"); Search for a document containing music in name or interest (must be consistent with music)
4.wildcardQuery () fuzzy query matches a single character, * matches multiple characters
5. Using Boolquerybuilder for compound queries
Using must:
- Fuzzy query
- Wildcardquerybuilder QueryBuilder1 = Querybuilders.wildcardquery (
- " name", "*jack*"); //Search for a document containing Jack in the name
- Wildcardquerybuilder QueryBuilder2 = Querybuilders.wildcardquery (
- " interest", "*read*"); //Search for documents containing read in interest
- Boolquerybuilder Boolquerybuilder = Querybuilders.boolquery ();
- The name must contain a jack,interest that must contain read, which is equivalent to and
- Boolquerybuilder.must (QueryBuilder1);
- Boolquerybuilder.must (QUERYBUILDER2);
Using should:
- Wildcardquerybuilder QueryBuilder1 = Querybuilders.wildcardquery (
- " name", "*jack*"); //Search for a document containing Jack in the name
- Wildcardquerybuilder QueryBuilder2 = Querybuilders.wildcardquery (
- " interest", "*read*"); //Search for documents containing read in interest
- Boolquerybuilder Boolquerybuilder = Querybuilders.boolquery ();
- The name contains jack or interest containing read, which is equivalent to or
- Boolquerybuilder.should (QueryBuilder1);
- Boolquerybuilder.should (QUERYBUILDER2);
Springdata-----Operation ES