0

検索から 5 つの一致を返すコードがあります。

ブラウザーでクエリを実行すると、5 つの結果が得られます。

http://localhost:9200/_search?q=Testing

SENSE エディターを使用すると、5 つの結果も表示されます。

Server=localhost:9200
POST _search
{
    "query": {
        "query_string": {
            "query": "Testing"
        }
    }
}

しかし、コントローラー内の私の C# コードは一致を取得できません。私は何が欠けていますか?

Uri localhost = new Uri("http://localhost:9200");
            var setting = new ConnectionSettings(localhost);
            setting.SetDefaultIndex("videos");
            var client = new ElasticClient(setting);

            var result = client.Search<SearchHint>(
                body => body.Query(
                    query => query.QueryString(
                        qs => qs.Query(keys))));

            var results = new SearchResults()
            {
                Results = result.Documents.ToList() <-- this has 0 items
            };

編集1:

public class SearchHint
    {
        public string Id { get; set; }
        public string Title { get; set; }
        public int NumItems { get; set; }
        public bool IsList { get; set; }

        public SearchHint(string id, string title, int numItems, bool isList)
        {
            Id = id;
            Title = title;
            NumItems = numItems;
            IsList = isList;
        }
    }

編集 2: インデックスには 4 つのタイプがあります (videos\list、videos\video、videos\author、videos\category)。どの検索でも、特定のタイプではなく、すべてのタイプを検索する必要があります。

4

1 に答える 1

1

この問題は、NEST が検索の型をデフォルトにする方法に関連していると思います。[ElasticType]クラスに and属性を指定していない限りSearchHint、次の URL で Elasticsearch にクエリを実行します。

 /_all/searchhint/_search

次のように、インデックスで使用しているタイプに対応するタイプ名をクラス定義に追加してみてください (mytype をインデックスの適切な値に置き換えます。また、インデックス付きアイテムのフィールドがデフォルトのマッピングと一致しない場合慣例 (キャメル ケース) では、データが取り込まれません。

 [ElasticType(Name = "mytype"]
 public class SearchHint
 {
       // Will map to field with name title in your index.
       //Use the following property to specify an alternate name
       //[ElasticProperty(Name="Title")]
       public string Title { get; set;}
 }

これがどのように機能するかの概要については、推論に関する NEST ドキュメントを参照してください。

更新: 前のものは、単一のタイプ内の検索にのみ適用されます。複数のタイプを検索する場合は.AllTypes()、検索クエリで指定する必要があり[ElasticType]、クラスで属性を指定する必要はありません。

            var result = client.Search<SearchHint>(
                body => body
                  .AllTypes()
                  .Query(
                    query => query.QueryString(
                        qs => qs.Query(keys))));
于 2014-05-19T15:24:52.040 に答える