0

マシン192.168.0.113(Centos 5.5)のTomcatで実行されているsolrサーバーをセットアップしました。そして、matchine 192.168.0.114 (Windows server 2003) に Web サイトをデプロイします。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, Version=0.4.0.2002, Culture=neutral, PublicKeyToken=bc21753e8aa334cb" またはその依存関係の 1 つ。

しかし、私は自分のプロジェクトに Microsoft.Practices.ServiceLocation.dll と SolrNet.dll への参照を追加しました。他に見逃している dll ファイルはありますか?

ところで、私はこの url:http://192.168.0.113:8070/solr を使用して、ブラウザで自分の solr サーバーにアクセスできます。

誰でも教えてもらえますか:

  1. solrnet と solr を異なるマシンで実行できますか?
  2. どうやってするの。

どうもありがとう!

4

3 に答える 3

3

Solrを初期化するときに2つの異なる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 に答える