Tag: solr

如何在Windows服务器上运行solr以便它自动启动?

如何在Windows服务器上运行solr,它会自动启动? 我运行它: java -jar start.jar 但我需要服务器自动执行此操作。

Solrcloud Zookeper设置:等待4000毫秒后没有找到注册的领导者,收集:c1切片:shard2

使用solr 4.10.3,我通过java中的嵌入式jetty服务器启动solr。 我试图用2个分片(领导者)配置solrcloud。 我有一个外部的zookeeper设置,我指向zookeeper实例,同时启动这样的solr。 System.setProperty(“zkHost”, “192.168.2.21:2111”); System.setProperty(“numShards”, “2”); System.setProperty(“collection.configName”, “configuration1”); System.setProperty(“bootstrap_confdir”,”/conf/zooconf”); 我有两个运行的solr实例,一个在8983端口,另一个在8984.问题是,我不确定两个solr节点是否都被识别为leader。 由于我通过java启动solr,我无法在solr管理界面中查看状态。 以下是我的solr.xml: 192.168.2.21 ${hostPort:8984} ${hostContext:solr} ${solr.zkclienttimeout:30000} ${genericCoreNodeNames:true} ${socketTimeout:120000} ${connTimeout:15000} 在main方法中,我连接到其中一个solr实例(8983)并使用以下代码片段创建核心。 CloudSolrServer server = new CloudSolrServer(“192.168.2.21:2111”); server.setZkConnectTimeout(15*60*1000); server.setZkClientTimeout(15*60*1000); server.setParser(new BinaryResponseParser()); server.setRequestWriter(new BinaryRequestWriter()); server.setDefaultCollection(“C1”); Create adminRequest = new Create(); adminRequest.setAction(CoreAdminAction.CREATE); adminRequest.setCoreName(“C1”); adminRequest.setCollection(“C1”); adminRequest.setCollectionConfigName(“configuration1”); adminRequest.setDataDir(“c:\\setup\somelocation”); adminRequest.setInstanceDir(“c:\\setup\somelocation\C1”); adminRequest.process(solrServer); 当我执行此操作时,C1仅在一个solr实例中创建(8983)。 ( 不是应该在两个solr实例的数据目录中创建的核心。? )。 在添加文档时,抛出以下exception。 等待4000毫秒后没有找到注册的领导者,收集:c1切片:shard2 这是添加文档时的clusterState: live nodes:[192.168.2.21:8984_solr, […]

Solr架构中字段的默认值可以是当前日期吗?

我正在使用Solr,我想在schema.xml中添加一个字段last_update ,其中默认值是添加或更新文档时的当前日期。 你知道我该怎么办? 谢谢

Jetty Classpath问题

我目前正在运行Solr,它是随附的Jetty容器。 从命令行运行时,它可以正常运行: java -jar start.jar 当我和start.jar在同一目录下时。 不幸的是,我需要能够从任何目录启动jetty,而不仅仅是包含start.jar的目录。 我尝试了很多选项,例如: java -Dsolr.solr.home=~/solr/ -Djetty.home=~/solr/ -Djetty.logs=~/solr/logs/ -cp ~/solr/start.jar:~/solr/lib/jetty-util-6.1.26-patched-JETTY-1340.jar:~/solr/lib/jetty-6.1.26-patched-JETTY-1340.jar:~/solr/lib/servlet-api-2.5-20081211.jar -jar ~/solr/start.jar ~/solr/etc/jetty.xml 每次我得到这个回溯: java.lang.ClassNotFoundException: org.mortbay.xml.XmlConfiguration at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) at org.mortbay.start.Main.invokeMain(Main.java:179) at org.mortbay.start.Main.start(Main.java:534) at org.mortbay.start.Main.start(Main.java:441) at org.mortbay.start.Main.main(Main.java:119)

Solr:如何动态提升有限数量的文件? 是否要修改QueryElevationComponent?

我的要求是为用户请求提升有限数量的(例如五个)文档。 我得到的是单个文档字段 ,其存储类似于表示电梯排名值的提升值的数值 。 因此,用户查询将返回具有最高电梯等级值的5个文档和剩余文档以按正常顺序填充页面。 怎么做? QueryElevationComponent仅允许静态查询定义。 Boosting不允许为特殊电梯排名字段增加有限数量的文档。 我是否必须编写修改后的QueryElevationComponent? 如果是,是否有很好的例子如何做到这一点? 或者是否存在另一种方法 ,我没有赶上? 感谢您的任何提示或想法!

Solr Custom RequestHandler – 注入查询参数

简短的问题:我正在寻找一种方法(java)来拦截对Solr的查询,并注入我的业务逻辑提供的一些额外的过滤参数。 我应该使用什么结构? 背景:首先,有点坦白:我是Solr的新秀。 对我来说,设置服务器,定义模式,编写function索引管理器,然后实际看到服务器返回正确的结果 – 完全按照预期! – 对自己来说已经是一项成就。 我也好! 但是,我目前正在从事一个需要更多的企业项目。 粗略地说,solr实例将由数千名用户通过同一个requestHandler进行查询,即返回的文档会根据用户的权限级别自动过滤。 例如,如果用户A和超级用户B都尝试了相同的搜索参数(即使是相同的URL),则用户B将获得所有用户A的文件,然后获得更多。 为了实现这一点,文档已经使用必要的权限级别信息编制索引。 好吧,考虑到这一点并利用Solr为newb开发人员提供的大量文档,我试图想出一个简单的自定义requestHandler来覆盖handleRequest函数,以便在SolrQueryRequest中注入必要的额外参数。 一切都很好和花花公子 – 除了我在QueryResponse中看不到任何差别,服务器粗鲁地忽略了我的小操作。 如果这是最好的方法,在没有太多暗示天气的情况下搜索网络几天后,最终决定在StackOverflow上找到好心人。 所以,简而言之,我的问题是: 这是正确的方法吗? 还有其他选择吗? 我已经可以掌握Solr的一些概念,但不可否认的是,有很多缺乏,而且完全有可能缺少某些东西。 如果是这样,在修改查询参数后,我应该做些什么来强制更新QueryResponse? 据我所知,这些仅仅是封装http请求,并且在修改后我无法嗅探查询服务器的任何内容。 提前谢谢,非常抱歉长篇文章! UPDATE 经过大量阅读API和特别多的试验和错误后,我设法获得了function性解决方案。 然而,我仍然不了解索尔的内部情况,因此仍然会欣赏一些启发。 随意随意打击,我仍然非常清楚自己的开玩笑。 解决方案的相关部分是通过覆盖handleRequestBody调用的此函数: private void SearchDocumentsTypeII(SolrDocumentList results, SolrIndexSearcher searcher, String q, UserPermissions up, int ndocs, SolrQueryRequest req, Map fields, Set alreadyFound) throws IOException, ParseException { BooleanQuery bq = […]

从Solr DataImportHandler中的Oracle日期获取正确的时间

我正在尝试使用Solr的DataImportHandler来索引来自Oracle DB的一些文档,除了正确读取Oracle Date列到我的文档中之外,一切正常。 我将Solr模式中的字段定义为 我首先尝试在DataImportHandler中仅对日期列执行基本的select语句,但所有日期都使用不正确的时间值进行索引。 例如,2004年1月12日上午09:28(美国东部时间)在DB中的日期被索引为: 2004-01-12T05:00:00Z 所有日期值都有正确的日期,但它们都有T05:00:00Z作为时间。 我最好的猜测是,它正在将数据库中的时间读取为午夜并将其转换为UTC。 如果是这种情况,我希望正确的值读取T14:28:00Z。 为什么不拿起数据库列的时间部分? 我知道DIH附带的日期变换器 ,但我不清楚它应该如何工作。 我也尝试过 在DIH,但似乎没有任何改变。

无法获得apache nutch来抓取 – 权限和JAVA_HOME被怀疑

我正在尝试按照NutchTutorial运行基本爬网: bin/nutch crawl urls -dir crawl -depth 3 -topN 5 所以我安装了Nutch并安装了Solr。 我将我的.bashrc $ JAVA_HOME设置为/usr/lib/jvm/java-1.6.0-openjdk-amd64 。 当我从nutch主目录运行bin/nutch时,我没有看到任何问题,但是当我尝试运行上面的爬网时,我收到以下错误: log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /usr/share/nutch/logs/hadoop.log (Permission denied) at java.io.FileOutputStream.openAppend(Native Method) at java.io.FileOutputStream.(FileOutputStream.java:207) at java.io.FileOutputStream.(FileOutputStream.java:131) at org.apache.log4j.FileAppender.setFile(FileAppender.java:290) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:216) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:133) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:97) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:689) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471) […]

为什么不能使用CentOS,plesk 9.2.1和tomcat 5.5来安装solr 1.3.0?

好的,我只是通过他的托管服务提供商为我的客户设置专用服务器。 他们在那里安装了plesk(版本9.2.1),这个专用服务器的一个注意事项是,如果我在控制面板外面做任何事情(即使用SSH)进行任何任务,他们不保证支持该软件组件。 这很好,因为我宁愿使用控制面板来完成它,因为我所要做的就是上传一个war文件来安装servlet。 这是问题,但是在安装最新版本的solr(1.3.0)后,我在plesk中收到了一个警告图标,它给了我一个模糊的错误,例如“应用程序的实际状态与从数据库中检索到的状态不对应。 “ 这是日志条目: Aug 17, 2009 11:16:15 PM org.apache.solr.servlet.SolrDispatchFilter init INFO: SolrDispatchFilter.init() Aug 17, 2009 11:16:15 PM org.apache.solr.core.SolrResourceLoader locateInstanceDir INFO: Using JNDI solr.home: /usr/share/solr Aug 17, 2009 11:16:15 PM org.apache.solr.core.CoreContainer$Initializer initialize INFO: looking for solr.xml: /usr/share/solr/solr.xml Aug 17, 2009 11:16:15 PM org.apache.solr.core.SolrResourceLoader INFO: Solr home set to ‘/usr/share/solr/’ Aug 17, 2009 11:16:15 […]

Lucene搜索结果按自定义顺序列表排序(每个用户都是唯一的)

我已经在我的应用程序中validation了用户,他们可以访问最多500,000个项目的共享数据库。 每个用户都有自己的面向公众的网站,并且需要能够在他们自己的网站上对显示的项目(想想upvote)进行优先排序。 在500,000件商品中,他们可能只有200件优先商品,其余商品的订单不太重要。 每个用户将以不同方式对项目区分优先级。 我最初在这里问了一个类似的mysql问题Mysql结果按列表排序,这对每个用户都是唯一的并得到了一个很好的答案,但我相信更好的选择可能是选择非sql索引解决方案。 这可以在Lucene中完成吗?还有另一种搜索技术会更好吗? PS。 Google会在搜索结果中实施类似的类型设置,如果您已登录,则可以优先处理并排除自己的搜索结果。 更新:重新标记为sphinx,因为我一直在阅读文档,我相信它可能能够做我想要的“每个文档属性值”存储在内存中 – 有兴趣听到狮身人面像大师的任何反馈