2016-11-27 8 views
1

RavenDBとASP.NET MVCを使用して検索クエリを実行しようとしています。 名前、料理、都市または州を使ってレストランを検索できるようにしたい。 インデックスフォルダにインデックスRestaurants_ByNameRestaurants_ByCuisineRestaurants_ByCityRestaurants_ByStateを作成しました。 Restaurant.csRavenDBとASP.NET MVCで検索を実行するには?

public class Restaurant 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Cuisine { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public int Postcode { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Email { get; set; } 
} 

インデックス - - Search.cs

public class Searching 
{ 
    public class Restaurants_ByName : AbstractIndexCreationTask<Restaurant> 
    { 
     public Restaurants_ByName() 
     { 
      Map = restaurants => from restaurant in restaurants 
           select new 
           { 
            restaurant.Name 
           }; 
      //Indexes.Add(x = x.Name, FieldIndexing.Analyzed); 
     } 
    } 

    public class Restaurant_ByCuisine : AbstractIndexCreationTask<Restaurant> 
    { 
     public Restaurant_ByCuisine() 
     { 
      Map = restaurants => from restaurant in restaurants 
           select new 
           { 
            restaurant.Cuisine 
           }; 
      //Indexes.Add(x = x.Cuisine, FieldIndexing.Analyzed); 
     } 
    } 

    public class Restaurant_ByCity : AbstractIndexCreationTask<Restaurant> 
    { 
     public Restaurant_ByCity() 
     { 
      Map = restaurants => from restaurant in restaurants 
           select new 
           { 
            restaurant.City 
           }; 
      //Indexes.Add(x = x.City, FieldIndexing.Analyzed); 
     } 
    } 

    public class Restaurant_ByState : AbstractIndexCreationTask<Restaurant> 
    { 
     public Restaurant_ByState() 
     { 
      Map = restaurants => from restaurant in restaurants 
           select new 
           { 
            restaurant.State 
           }; 
      //Indexes.Add(x = x.State, FieldIndexing.Analyzed); 
     } 
    } 

    public Searching(string searchString) 
    { 
     using (var store = new DocumentStore 
     { 
      Url = "http://localhost:8080/", 
      DefaultDatabase = "foodfurydb" 
     }) 
     { 
      store.Initialize(); 

      using (var session = store.OpenSession()) 
      { 
       // using query 
       IList<Restaurant> restaurants = session 
        .Query<Restaurant, Restaurants_ByName>() 
        .Where(x => x.Name == searchString) 
        .ToList(); 
      } 
     } 
    } 
} 

私が必要とする今、私は私のSearch.cshtml

モデルに検索機能を使用する方法がわかりません私のコントローラで何かをする権利?

public ActionResult SearchRestaurant() 
    { 
     using (var store = new DocumentStore 
     { 
      Url = "http://localhost:8080/", 
      DefaultDatabase = "foodfurydb" 
     }) 
     { 
      store.Initialize(); 

      using (var session = store.OpenSession()) 
      { 

      } 
     } 
     return View(); 
    } 

部分図 - SearchRestaurant.cshtml

<div class="row"> 
    <div class="input-field col s12" id="search-bar"> 
     <i class="material-icons prefix">search</i> 
     <input placeholder="Search by restaurant name/cuisine/location" id="search-restaurant"/> 
    </div> 
</div> 

編集

私は何を達成しようとしていることは、それが返す名前/料理/場所を入力することです関連する結果

enter image description here

答えて

2

プロパティのインデックスを個別に作成しないでください。効率的ではありません。そして、一度にすべてを検索する方がよいです。

インデックスは次のようになります。

public class Restaurant_Search : AbstractIndexCreationTask<Restaurant, Restaurant_Search.Result> 
{ 
     public class Result 
     { 
      public string Query; 
     } 

     public Restaurant_ByCuisine() 
     { 
      Map = restaurants => from restaurant in restaurants 
           select new 
           { 
            Query = new [] 
            { 
             restaurant.Cuisine, 
             restaurant.State, 
             restaurant.City, 
             restaurant.Name 
            } 
           }; 

      Indexes.Add(x => x.Cuisine, FieldIndexing.Analyzed); // => instead of = (previously) 
     } 
} 

あなたは、その後使用して、それを照会します:あなたは今、すべてのこれらのフィールド全体で両方の検索とクエリの種類をできること

using (var session = store.OpenSession()) 
{ 
    var matches = session.Query<Restaurant_Search.Result, Restaurant_Search>() 
     .Search(x => x.Query, "new york indian") 
     .OfType<Restaurant>() 
     .ToList(); 
} 

注意をユーザーはより多くの興味深いものを提供することができます。

+0

'Indexes.Add(x = x.Cuisine、FieldIndexing.Analyzed);'この行に対して、現在のコンテキストに存在しないというエラーが発生しました。エラーを修正するためにプライベートオブジェクトxを作成する必要がありますか? –

+0

@ jenna_3108あなたのコードスニペットには '>'がありません。 'Indexes.Add(x => x.Cuisine、FieldIndexing.Analyzed);' –

関連する問題