Les programmeurs Java doivent-voir: Solr vip PPC

traits

Cet article utilisera solr vip le classement complet, ici est non seulement commandé par le niveau de vip. Mais lorsque vous utilisez Solr conditions de requête (sans utiliser le genre) remplissent les conditions et une des données de niveau vip affichées à l'avant, cette fois nous allons utiliser un mécanisme de notation personnalisé sous-jacent solr fourni à compléter.

environnement Présentation

Environnement de développement : IDEA + SpringBoot  S environnement ELO : solr4.10 + tomcat7

Note: SOLR environnement ambiant + IK + tomcat mot chinois configuration auto-installation

préparations

Installation Environnement solr + IK + environnement tomcat mot de configuration (auto d'achèvement) Vérifiez solr environnement:

Vérifiez le mot IK chinois, un mot chinois a les effets suivants peuvent être

Ajoutez les domaines d'activité suivants dans la collection schema.xml domaine du service d'annuaire Solr qui contient en elle: le titre des produits de base, le temps de la création, le nombre de clics produits, marchandises appartenant niveau des entreprises, commentaires sur les produits description du produit, le prix du produit, produit.

<!-- general -->
<!-- 商品标题 -->
<field name="t_title" type="text_ik" indexed="true" stored="true" />
<!-- 商品介绍 -->
<field name="t_intr" type="text_ik" indexed="true" stored="true" />
<!-- 商品价格 -->
<field name="t_price" type="float" indexed="true" stored="true" />
<!-- 商品创建时间 -->
<field name="t_createTime" type="tdate" indexed="true" stored="true" />
<!-- 商品点击次数-->
<field name="t_point" type="long" indexed="true" stored="true" />
<!-- 商品所属商家vip等级[1-5级] -->
<field name="t_vip" type="long" indexed="true" stored="true" />
<!-- 商品评价-->
<field name="t_assess" type="long" indexed="true" stored="true" />

<!-- 设置关键字搜索域-->
<field name="t_searchText" type="text_ik" indexed="true" stored="false" multiValued="true" />

<!-- 设置关键字域复制标题和介绍 -->
<copyField source="t_title" dest="t_searchText" />
<copyField source="t_intr" dest="t_searchText" />
<!-- 将关键字搜索域设置默认搜索域-->
<defaultSearchField>t_searchText</defaultSearchField>

<solrQueryParser defaultOperator="AND"/>

structures techniques

projet IDEA construit en utilisant maven

Ajouter la dépendance jar suivante dans pom.xml

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
</dependency>
</dependencies>

SpringBoot commencer à écrire SpringbootSolr5Application.java classe

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootSolr5Application {

public static void main(String[] args) { SpringApplication.run(SpringbootSolr5Application.class, args);
}
}

Application.properties créés dans le répertoire des ressources est ajouté au contenu:

spring.data.solr.host=//localhost:8080/solr/

Ecrire CustomSortTest.java données de requête d'initialisation:

@RunWith(SpringRunner.class) @SpringBootTest
public class CustomSortTest {
@Autowired
private SolrClient client;
/**
* 初始化solr索引数据
* */ @Test
public void initSolrData() throws Exception{
List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); for(int i=0;i<100;i++){
SolrInputDocument document = new SolrInputDocument();
// 文 档 id document.setField("id",i);
//商品标题
document.setField("t_title","new"+i+"- 三星 W"+i*100+" 黑色 电信3G手机 双卡双待双通");
//商品介绍
document.setField("t_intr","下单送12000毫安移动电源!双3.5英寸魔焕炫屏,以非凡视野纵观天    下时局,尊崇翻盖设计,张弛中,尽显从容气度!");
//价格
document.setField("t_price","8000");
//创建日期
document.setField("t_createTime",new Date());
//点击率document.setField("t_point",i%9+9);
//评价分数
document.setField("t_assess",i%11+5);
//vip 等 级 [1-5] document.setField("t_vip",i%5); docs.add(document);
}
client.add(docs); client.commit();
}
}

L'écriture sur les façons de regarder la requête de l'état par défaut: effets Samsung:

@Test
public void defualtQuerySort() throws Exception{ SolrQuery solrQuery = new SolrQuery();
//关键词
solrQuery.set("q","t_searchText:*三星*");
//分页,0开始,每页10条,setStart设置的就是显示第几页
solrQuery.setStart(0); solrQuery.setRows(10);
//执行查询
QueryResponse response = client.query(solrQuery);
//文档结果集
SolrDocumentList results = response.getResults(); System.out.println("查询到的总条数:"+ results.getNumFound());
//遍历查询的结果
for (SolrDocument solrDocument : results) {
String id = solrDocument.get("id").toString();
String title = solrDocument.get("t_title").toString(); String assess = solrDocument.get("t_assess").toString();
double point = Double.valueOf(solrDocument.get("t_point").toString()); double vip = Double.valueOf(solrDocument.get("t_vip").toString());
System.out.println("id:"+id+" 标题:"+title+" 评价:"+assess+ "点击率:"+point+" vip等
级 :"+vip+" " );
}
}

Les résultats sont les suivants:

Interrogation Total: 100

id: 0 Titre: new0- W0 noir Samsung 3G télécommunications mobiles note double double double passe en veille de la carte: 5 Hits: 9.0 vip note: 0.0 
ci - dessus id mentionné: 1 titre: new1- noir Samsung W100 3G double carte téléphonie mobile double veille évaluation à double passe : 6 résultats: 10,0 vip note: 1.0 
ci - dessus identifiant indiqué: 2 titre: new2- noir Samsung W200 3G télécommunications mobiles carte double veille note double-pass: 7 résultats: 11,0 note vip: 2.0 
ci - dessus identifiant indiqué: 3 titre: new3- Samsung W300 noir 3G télécommunications mobiles double carte double veille note double-pass: 8 résultats: 12,0 vip: 3.0 
ci - dessus identifiant indiqué: 4 titre: new4- noir Samsung W400 3G télécommunications mobiles double carte double veille notation double-pass: 9 résultats: 13,0 note vip: 4.0
id: 5 titre: new5- noir Samsung W500 3G télécommunications mobiles note double double double passe en veille de la carte: 10 résultats: 14,0 vip note: 0.0 
ci - dessus id mentionné: 6 titre: new6- noir Samsung W600 3G double carte téléphonie mobile double veille évaluation à double passe : 11 résultats: 15,0 vip note: 1.0
ci - dessus identifiant indiqué: 7 titre: new7- noir Samsung W700 3G télécommunications mobiles carte double veille note double-pass: 12 résultats: 16,0 note vip: 2.0 
les ci - dessus identifiant indiqué: 8 titre: new8- Samsung W800 noir télécommunications mobiles 3G carte double veille note double passage: 13 résultats: 17,0 évaluation des vip: 3.0 
ci - dessus mentionné id: 9 titre: new9- Samsung W90 0 carte télécommunications mobiles 3G Noir double veille note double passage: 14 Hits: 9,0 note vip: 4.0
id: 10 Titre: new10- noir Samsung W1000 3G télécommunications mobiles double carte double veille double évaluation passe: 15 résultats: 10.0 Évaluation des vip: 0.0

D'après les résultats du tri par défaut est id triée.

Fini de personnaliser votre score, alors que le classement vip dans l'ordre de tri par défaut comme condition pour Samsung

@Test
public void testVipPageQuery()throws Exception{ SolrQuery solrQuery = new SolrQuery();
//关键词
solrQuery.set("q","t_searchText:*三星*");
//分页,0开始,每页20条,setStart设置的就是显示第几页
solrQuery.setStart(0); solrQuery.setRows(20);
//设置权重方式为edismax
solrQuery.set("defType","edismax");
//scoreMethod为自定义评分规则,这里就是以t_vip+0的和来得到评分,然后以该评分进行排序String scoreMethod = "sum(t_vip,0)";
solrQuery.set("bf", scoreMethod);
//执行查询
QueryResponse response = client.query(solrQuery);
//文档结果集
SolrDocumentList results = response.getResults(); System.out.println("查询到的总条数:"+ results.getNumFound());
//遍历查询的结果
for (SolrDocument solrDocument : results) {
String id = solrDocument.get("id").toString();
String title = solrDocument.get("t_title").toString(); String assess = solrDocument.get("t_assess").toString(); String point = solrDocument.get("t_point").toString(); String vip = solrDocument.get("t_vip").toString();
//double point = Double.valueOf(solrDocument.get("t_point").toString());
//double vip = Double.valueOf(solrDocument.get("t_vip").toString());
System.out.println("id:"+id+" 标题:"+title+" 评价:"+assess+ "点击率:"+point+" vip等级 :"+vip+" " );
}
}

Les résultats sont les suivants:

Le nombre total de requêtes à: 100
ci - dessus identifiant indiqué: 4 Titre: new4- noir télécommunications mobiles Samsung W400 3G double carte double veille passe Samsung Note: 9 Hits: 13 Note vip: 4
ci - dessus id mentionné: 9 Titre: télécommunications new9- Samsung W900 Noir 3G téléphone mobile à double carte double veille note double-pass: 14 résultats: 9 évaluation des vip: 4
ci - dessus id mentionné: 14 titre: new14- noir Samsung W1400 3G télécommunications mobiles double carte double veille double passe note Samsung: 8 résultats: 14 note vip: 4 
id: 19 titre: new19- noir Samsung W1900 3G télécommunications mobiles note double double double passe en veille de la carte: 13 résultats: 10 vip note: 4 Numéro: 24 titre: new24- noir Samsung W2400 3G télécommunications mobiles double carte double veille passe Samsung note: 7 résultats: 15 vip note: 4
ci - dessus identifiant indiqué: 29 titre: new29- noir Samsung W2900 3G télécommunications mobiles carte double veille note double-pass: 12 résultats: 11 note vip: 4 
ci - dessus identifiant indiqué: 34 titre: new34- Samsung W3400 noir 3G les télécommunications mobiles double double carte double veille passe Evaluation Samsung: 6 résultats: 16 note vip: 4 
ci - dessus identifiant indiqué: 39 titre: new39- noir Samsung W3900 3G télécommunications mobiles carte double veille note double-pass: 11 résultats: 12 note vip : 4
ci - dessus mentionné id: 44 titre: new44- noir Samsung W4400 3G téléphonie mobile à double carte double veille passe Samsung Note: 5 coups Note 17 vip: 4 
id: 49 Titre: new49- noir Samsung W4900 3G télécommunications mobiles double carte double veille double évaluation passe: 10 Hits: 13 Note vip: 4 id: 54 Titre: new54- noir Samsung W5400 3G télécommunications mobiles double carte double veille Samsung passe note: 15 résultats: 9 vip note: 4 
ci - dessus id mentionné: 59 titre: new59- noir Samsung W5900 3G télécommunications mobiles double carte double veille note double-pass: 9 résultats: 14 évaluation vip: 4
ci - dessus id mentionné: 64 titre: new64- Samsung W6400 noir 3G les télécommunications mobiles à double carte double veille passe note Samsung: 14 résultats: 10 note vip: 4 
ci - dessus id mentionné: 69 titre: new69- noir Samsung W6900 3G télécommunications mobiles double carte double veille note double-pass: 8 résultats: 15 évaluation vip : 4
ci - dessus id mentionné: 74 titre: new74- noir Samsung W7400 3G télécommunications mobiles double carte double veille passe note Samsung: 13 résultats: 11 vip note: 4 
ci - dessus id mentionné: 79 titre: new79- noir Samsung W7900 3G double carte téléphonie mobile double veille double passage note: 7 résultats: 16 évaluation vip: 4
ci - dessus id mentionné: 84 titre: new84- noir télécommunications mobiles Samsung W8400 3G double carte double veille passe note Samsung: 12 résultats: 12 note vip: 4
ci - dessus id mentionné: 89 titre: new89 - Samsung W8900 noir 3G télécommunications mobiles double carte double veille double note passe: 6 résultats: 17 évaluation vip: 4
ci - dessus mentionné: 94 id norme Titre: new94- noir Samsung W9400 3G télécommunications mobiles double carte double veille double passe note Samsung: 11 Hits: 13 Note vip: 4 
ci - dessus id mentionné: 99 Titre: new99- noir Samsung W9900 3G télécommunications mobiles double carte double veille note double-pass: 5 résultats: 9 la note vip: 4

Nous pouvons voir une façon de personnaliser le score, le résultat serait le meilleur classement vip

Remarque: Pour plus solr

Sont triés à l'aide solr personnalisé de la fonction fonction de requête. Vous pouvez voir solr api auto-apprentissage

Publié 682 articles originaux · éloge de won 1391 · Vues 1,71 millions +

Je suppose que tu aimes

Origine blog.csdn.net/itcast_cn/article/details/104770048
conseillé
Classement