- 使用solr6.0搭建solrCloud
牛初九
使用solr6.0搭建solrCloud一、搭建zookeeper集群下载zookeeper压缩包到自己的目录并解压(本例中的目录在/opt下),zookeeper的根目录我们在这里用${ZK_HOME}表示。在${ZK_HOME}/conf下创建zoo.cfg文件,可以复制zoo_sample.cfg文件:cpzoo_sample.cfgzoo.cfg修改zoo.cfg的内容如下:vimzoo.
- SpringData_Solr
临江仙.刺客
笔记lucenespringsolr
【Solr】主要内容Solr简介Solr搜索原理Solr单机版安装可视化管理界面新建核心分词Dataimport使用SolrJ操作SolrSpringDataforApacheSolrSolrCloud一、Solr简介1为什么使用Solr在海量数据下,对MySQL或Oracle进行模糊查询或条件查询的效率是很低的。而搜索功能在绝大多数项目中都是必须的,如何提升搜索效率是很多互联网项目必须要考虑的问
- solr mysql原理_solr replication原理探究
王正威
solrmysql原理
无论是垂直搜索,还是通用搜索引擎,对外提供搜索服务其压力都比较大,经常有垂直电商在做活动的时候服务器宕机。对面访问压力比较大的情况,一般的应对方法就是【集群】+【负载均衡】。Solr提供了两种解决方案来对应访问压力。其一是Replication,其一是SolrCloud。Replication采用了master/slave模式,用读写分离的思想来提高对外服务能力。但本质上还是单兵作战。Master
- solr集群的搭建
墨夕晨
1.下载solrcloud然后解压solr-7.3.1.tgz到/usr/local/solrcloud目录下cd/optwgethttp://mirror.bit.edu.cn/apache/lucene/solr/7.7.3/solr-7.7.3.tgztar-xzvfsolr-7.7.3.tgzmkdir/usr/local/solrcloudtar-xvfsolr-7.3.1.tgz-C/
- solr kerberos java_Kerberos身份验证插件
太阳r
solrkerberosjava
如果您使用Kerberos来保护您的网络环境,则可以使用Kerberos身份验证插件来保护Solr集群。这允许Solr使用Kerberos服务主体和keytab文件来认证ZooKeeper以及Solr群集的节点(如果适用)。AdminUI和所有客户端(如SolrJ)的用户在能够使用UI或向Solr发送请求之前还需要拥有一个有效的票证。在SolrCloud模式或独立模式下支持Kerberos身份验证
- 在Ubuntu 20 上安装 Apache Solr8
anxingirl
solrubuntuapachelinux
1.下载APACHESolr把solr文件放在/opt路径下面。2.解压Solrunzipsolr-8.11.1.zip3.启动solrsudobin/solrstart-ecloud-forcexc194@dku-dspace-app-dev-01:/opt/solr-8.11.1$sudobin/solrstart-ecloud-forceWelcometotheSolrCloudexampl
- Elasticsearch(一)---介绍
30岁老阿姨
elasticsearch大数据搜索引擎
简介Elasticsearch是一个基于Lucene的实际的分布式搜索和分析引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。基于RESTful接口。官网地址:Elasticsearch平台—大规模查找实时答案|ElasticES与solr的对比:接口类似webservice的接口solrREST风格的访问接口es分布式存储solrCloudsolr4.x才支持es是为分
- HBase + Solr Cloud实现HBase二级索引
字节侠
SolrHBase
1.执行流程2.SolrCloud实现http://blog.csdn.net/u011462328/article/details/530083443.HBase实现1)自定义Observer①代码packagecn.bfire.coprocessor;importcom.typesafe.config.Config;importcom.typesafe.config.ConfigFactory
- Solr集群Linux安装
_薯条
介绍:Solr集群的安装需要依赖zookeeper的管理,所以需要保证系统中安装了zookeeper;集群的特点:①集中式的配置信息;②自动容错;③近实时搜索;④查询时自动负载均衡;集群示意图:集群示意图1、物理结构:三个Solr实例(每个实例包括两个Core),组成SolrCloud;2、逻辑结构:索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Co
- solr实现简单的增删改查
guyunduzai
solr技术研究solrj实现增删改查solr技术入门solrj查询lucene技术solr+lucene
solr是一款非常强大的搜索项目,虽然基于luncen开发,但是在其基础上做了一定的修改,特别是强大的solrcloud,我是刚开始接触solr,记录下使用solr实现最简单的增删改查。首先需要搭建solr的开发环境,网上搭建solr开发环境的资料很多,大家可以去找一下,搭建过程也很简单,这里默认大家环境是完好的,没好的话可以参考我的另外一篇博客。以下操作前提假设:schema.xml中主要的配置
- Solr搜索引擎 — SolrCloud安装和集群配置
文振熙
搞定了一切的一切之后下一步就是正式使用了,但是之前介绍的都是在单台服务器上进行的部署,如果在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方式附上:喵了个咪的博客:http://w-blog.cnSolr官网:http://lucene.apache.org/solr/PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本一、
- Solr搜索引擎 — SolrCloud介绍和环境准备
文振熙
搞定了一切的一切之后下一步就是正式使用了,但是之前介绍的都是在单台服务器上进行的部署,如果在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方式附上:喵了个咪的博客:http://w-blog.cnSolr官网:http://lucene.apache.org/solr/PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本一,
- Solr服务,阿里云报警说是发现了漏洞,文件中包含WebShell代码
lzh_me
solrsolr服务器lucenetlog
我们项目的SolrCloud节点的tlog文件被监测到有WebShell代码进行了报警,要求删除文件。我们的场景是数据采集后存储在Solr里面,所以tlog里面记录了对索引的操作,采集的内容里面有WebShell代码,特别是一些技术类博客的内容,里面有代码块。存在疑点:这个是不是Solr的漏洞,有知道的大佬可以留言告知下。(我没有搜到)解决方式:1、等待log文件更新;2、直接删除;我的操作方式是
- Solr原理剖析
Hello.Reader
solrlucene
一、简介Solr是一个高性能、基于Lucene的全文检索服务器。Solr对Lucene进行了扩展,提供了比Lucene更为丰富的查询语言,并实现了强大的全文检索功能、高亮显示、动态集群,具有高度的可扩展性。同时从Solr4.0版本开始,支持SolrCloud模式,该模式下能够进行集中式的配置信息、近实时搜索、自动容错等功能:利用ZooKeeper作为协同服务,启动时可以指定把Solr的相关配置文件
- solr集群(solrcloud)部署搭建
葒脃坧頭
zookeepersolrcloudsolr集群
`简介`SolrCloud旨在提供一个高度可用、容错的环境,用于跨多个服务器分发索引内容和查询请求。它是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。它是灵活的分布式搜索和索引,无需主节点来分配节点、分片和副本使用ZooKeeper来管理,查询和更新可以发送到任何服务器。`特点`1、集中式的配置信息2、自动容错3、近实时搜索4、查询时
- Solr集群搭建
Lewis-q398529803
Solr集群搭建1.Solr集群1.1什么是SolrCloudSolrCloud(solr云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。SolrCloud是基于Solr和Zookeeper的分布式搜索
- linux环境solr集群部署,在linux上搭建Solr集群的方法
老纪聊数码
linux环境solr集群部署
什么是SolrCloudSolrCloud(solr云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeep
- Solr集群的搭建
panyuxin_
solr
第一步:创建四个tomcat实例。每个tomcat运行在不同的端口。8180、8280、8380、8480第二步:部署solr的war包。把单机版的solr工程复制到集群中的tomcat中。第三步:为每个solr实例创建一个对应的solrhome。使用单机版的solrhome复制四份。第四步:需要修改solr的web.xml文件。把solrhome关联起来。第五步:配置solrCloud相关的配置
- 【高危】Apache Solr 代码执行漏洞(MPS-wic0-9hjb)
墨菲安全
墨菲安全实验室漏洞预警solrapachelucene网络安全
漏洞描述ApacheSolr是一款开源的搜索引擎。在ApacheSolr受影响版本中,由于Solr默认配置下存在服务端请求伪造漏洞,且SolrResourceLoader中实现了javaSPI机制。当Solr以SolrCloud模式启动时,攻击者可以通过构造恶意的solrconfig.xml文件,组合利用从而执行任意java代码。该漏洞已存在POC。漏洞名称ApacheSolr代码执行漏洞漏洞类型
- 08-solrcloud
张力的程序园
solrcloud就是solr的集群,本文将阐述如何搭建solrcloud集群。1、前提约束三台CentOS服务器作者的三台CentOS服务器ip分别为192.168.100.134、135、136;且相互ping通三台机子上已安装zookeeper集群https://www.jianshu.com/p/48f142f876d4每台机子都已经安装solrhttps://www.jianshu.co
- Solr4.0(SolrCloud) & ElasticSearch(ES) 比较
追寻北极
cloud
team之前的search解决方案不同于行业常见架构(solr及其它开源项目),其searcher和indexer在分布式环境下是分离的,而solr等opensourceproject基本都是放在单个instance的。两者以单独的instance存在,甚至可以searcher部署在A机器上,indexer部署在B机器上。当然我们也支持将两者放在同一个instance里。这种架构足以满足之前的需求
- solrCloud一:zookeeper集群搭建
已三更,起来独自绕阶行
java-zookeeperzookeepersolr
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。SolrCloud是Solr的一种分布式部署方式,当索引越来越大时,一个单一的系统无法满足空间和查询效率上的要求,这个时候往往需要考虑引入solr的分布式索引了。而zookeeper常与中间件搭配作为注册中心使用,具有集中式的配置信息、自动容错、近实时搜索、查询时自动负
- SolrCloud的搭建和使用
_哲
solr分布式
1.solrCloud基本概念1.1什么是solrCloudSlrCloud(solr集群)是Solr提供的分布式搜索方案。当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud。当索引量很大,搜索请求并发很高时,同样需要使用SolrCloud来满足这些需求。不过当一个系统的索引数据量少的时候是没有必要使用SolrCloud的。1.2solrCloud的结构SolrCloud为了降低单
- 全文检索Solr及Zookeeper组合介绍
看得见的等候
全文检索Solr全文检索Zookeeper
最近重新了解一下全文检索Solr,虽不是什么新技术,但是也在此做个简单总结:Solr是一个独立的企业级搜索应用服务器,基于Lucene的全文搜索服务器:SolrCloudSolrCloud(Solr云)是Solr提供的分布式搜索方案,当需要大规模容错、分布式索引和检索能力时使用。当一个系统的索引量很大、搜索请求并发很高时需要使用SolrCloud来满足这些需求。SolrCloud是基于Solr和Z
- Solr+Zookeeper 搭建搜索集群SolrCloud
开着奥迪卖小猪
分布式微服务Java数据SolrLuceneZookeeperSolrCloud
目录一、简介1、SolrCloud是个什么玩意?2、Solr是个什么玩意?3、zookeeper是个什么玩意?4、实现负载均衡的方式:(Nginx、Redis槽、Zookeeper)二、SolrCloud的结构1、物理结构2、逻辑结构三、SolrCloud的搭建(3个zookeeper、4个solr)1、3台zookeeper搭建2、4台solr实例的搭建四、SolrCloud的使用(solrj访
- SolrCloud之Zookeeper的搭建
S水流年
第三方系统solr
1、下载先去https://zookeeper.apache.org/releases.html下载,我下载的是zookeeper-3.4.11.tar.gz版本。2、安装(准备三台服务器,我的IP为10.1.5.202,10.1.5.203,10.1.5.31)2.1解压:tar-zxvfzookeeper-3.4.11.tar.gz2.2修改配置文件:在conf目录下删除zoo_sample.
- solrCloud搭建及演化
fuhaiqiang123
技术类solrtomcatlucene
系列文章目录第一章zookeeper的搭建及启动脚本第二章solr单机搭建使用第三章solrCloud搭建及演化文章目录前言solr是一个web项目,上一节我们部署了solr的单机版,实际上solrcloud是多个tomcat的组合,将多个tomcat部署之后,让多个tomcat之间互相通信,然而tomcat自身不具备集群的功能,所以我们借助zookeeper实现tomcat直接的通信。一、Sol
- SolrCloud之solr单机搭建使用
fuhaiqiang123
技术类solrlucenejava
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加第一章zookeeper的搭建及启动脚本第二章solr单机搭建使用第三章solrCloud搭建及演化文章目录前言随着互联网技术的不断迭代更新,分布式技术也越来越重要,很多人都开启了学习模式,本文就介绍了solr搭建及使用的基础内容。一、solr是什么?1、solr是一个war项目,是一个高性能,采用java开发的,基于Lu
- SolrCloud简介——solr 名词解释
Yoara
solrsolrzookeeper
转自——找不到出处了。。一.简介SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布式搜索方案。SolrCloud是Solr的基于Zookeeper一种部署方式。Solr可以以多种方式部署,例如单机方式,多机Master-Slaver方式。二.特色功能SolrCloud有几个特色功能:集中式的配置信息使用ZK进行集中配置。启动时可以指定把Solr的相关配置文件上传Zoo
- SolrCloud 搭建之 zookeeper搭建
fuhaiqiang123
技术类zookeeper分布式架构中间件
系列文章目录第一章zookeeper的搭建及启动脚本第二章solr单机搭建使用第三章solrCloud搭建及演化文章目录前言随着互联网技术的不断迭代更新,分布式技术也越来越重要,很多人都开启了学习模式,本文就介绍了solr搭建及使用的基础内容。zookeeper对于大多数人来说并不陌生,但是大部分人都是停留在使用阶段,今天我们就一起来搭建一个zookeeper集群1、若在同一台机器上安装zooke
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include