0

我在机器 192.168.0.113(Centos 5.5)中设置了一个在 Tomcat 中运行的 solr 服务器。我在matchine 192.168.0.114(Windows server 2003)中部署了一个网站。我在 matchine 192.168.0.114 中使用 solrnet。完整的代码如下(感谢@Paige Cook 编辑):

using System;
using System.Collections.Generic;
using System.Text;
using SolrNet;
using NUnit.Framework;
using SolrNet.Attributes;
using SolrNet.Commands.Parameters;
using Microsoft.Practices.ServiceLocation;
namespace MySolrNet
{
    public class Video
    {
        private string videoid;
        [SolrField("videoid")]
        public string Videoid
        {
            get { return videoid; }
            set { videoid = value; }
        }

        private string videoname;
        [SolrField("videoname")]
        public string Videoname
        {
            get { return videoname; }
            set { videoname = value; }
        }
        private string videoorigin;
        [SolrField("videoorigin")]
        public string Videoorigin
        {
            get { return videoorigin; }
            set { videoorigin = value; }
        }
        public Video(string id, string name, string origin)
        {
            this.Videoid = id;
            this.Videoname = name;
            this.Videoorigin = origin;
        }
        public Video()
        {

        }
        public void FixtureSetup()
        {
            Startup.Init<Video>("http://192.168.0.113:8070/solr");
        }
        public void Add()
        {
            Video p = new Video("1", "test video", "Solr Test");
            ISolrOperations<Video> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Video>>();
            solr.Add(p);
            solr.Commit();
        }
    }

    [TestFixture]
    public class VideoTests
    {
        [TestFixtureSetUp]
        public void FixtureSetup()
        {
            Startup.Init<Video>("http://192.168.0.113:8070/solr");
        }
        [Test]
        public void Add()
        {
            Video p = new Video("1", "test video", "Solr Test");
            ISolrOperations<Video> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Video>>();
            solr.Add(p);
            solr.Commit();
        }
        [Test]
        public void Query()
        {
            ISolrOperations<Video> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Video>>();
            SolrQueryResults<Video> results = solr.Query(new SolrQueryByField("videoid", "33013"));
            Assert.AreEqual(1, results.Count);
            Console.WriteLine(results[0].Videoname);
        }
    }
}

但是,添加查询测试都失败了。它抱怨:TestFixture 失败:SetUp:System.IO.FileLoadException:无法加载文件或程序集“SolrNet,版本=0.4.0.2002,Culture=neutral,PublicKeyToken=bc21753e8aa334cb”或其依赖项之一。

但是我在我的项目中添加了对 Microsoft.Practices.ServiceLocation.dll 和 SolrNet.dll 的引用,还有其他我想念的 dll 文件吗?

顺便说一句,我可以使用以下网址在浏览器中访问我的 solr 服务器:http://192.168.0.113:8070/solr。

谁能告诉我:

  1. 我可以在不同的机器上运行 solrnet 和 solr 吗?
  2. 怎么做。

非常感谢!

4

3 回答 3

3

我不明白为什么您在初始化 Solr 时使用两个不同的 URL。尝试将 Paige 应用程序中的 URL 更改为您在原始问题中发布的 URL:

http://192.168.0.113:8070/solr

于 2013-01-24T00:41:07.137 回答
1

感谢您发布代码。我看到的第一件事是您使用测试类作为类类型将数据传递给 Solr。把它们分开,这可能会导致一些问题。我建议如下:

public class Video
{
    private string videoid;
    [SolrField("videoid")]
    public string Videoid
    {
        get { return videoid; }
        set { videoid = value; }
    }

    private string videoname;
    [SolrField("videoname")]
    public string Videoname
    {
        get { return videoname; }
        set { videoname = value; }
    }
    private string videoorigin;
    [SolrField("videoorigin")]
    public string Videoorigin
    {
        get { return videoorigin; }
        set { videoorigin = value; }
    }
}

[TestFixture]
public class VideoTests
{
    [TestFixtureSetUp]
    public void FixtureSetup()
    {
        Startup.Init<Video>("http://192.168.0.113/solr");
    }
  [Test]
    public void Add() {
        Video p = new Video("1","test video","Solr Test");
        ISolrOperations<Video> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Video>>();
        solr.Add(p);
        solr.Commit();
    }
    [Test]
    public void Query()
    {
        ISolrOperations<Video> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Video>>();
        SolrQueryResults<Video> results = solr.Query(new SolrQueryByField("videoid", "33013"));
        Assert.AreEqual(1, results.Count);
        Console.WriteLine(results[0].Videoname);
    }        
}

更新:在控制台应用程序中试试这个,看看它是否有效......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SolrNet;
using Microsoft.Practices.ServiceLocation;
namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            Startup.Init<Video>("http://192.168.0.113:8070/solr");
            var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Video>>();

            var video = new Video("1", "test", "test");
            solr.Add(video);
            solr.Commit();

            var results = solr.Query(SolrQuery.All);
            Console.WriteLine("{0} - {1} - {2}",
                results[0].Videoid, results[0].Videoname, results[0].Videoorigin);
        }
    }
    public class Video
    {
        public Video(string id, string name, string origin)
        {
            Videoid = id;
            Videoname = name;
            Videoorigin = origin;
        }

        public string Videoid { get; set; 
        public string Videoname { get; set; }
       public string Videoorigin { get; set; }
    }
}
于 2013-01-17T14:48:24.813 回答
0

您可以按照 Paige 的建议检查您的项目设置吗?您是否在解决方案中添加了 SolrNet 源代码作为项目参考?如果您使用的是 dll,您可以粘贴您的 .csproj 文件内容吗?如果紧急,请下载源代码并作为项目参考添加到您的解决方案中,直到找出问题所在。

于 2013-01-24T09:30:44.990 回答