2016-04-04 13 views
1

検索で「タイトル」フィールドの名前を持つ検索結果を除外したいという検索があります。たとえば、検索バーに「連絡先」と入力します。私は[お問い合わせ]ページを表示したくないのですが、[お問い合わせ]ページに単語が含まれているものを検索したい場合は、[OK]をクリックします。私はTEMPLATENAMEとIDを取得することができていますが、フィールドを取得するように見えることはできません...Linqを使用してサイトトークフィールドを取得する方法

Item homeItem = Main.Utilities.SitecoreUtils.getHomeItem(); 

var query = PredicateBuilder.True<SearchResultItem>(); 
query = query.And(i => i.Paths.Contains(homeItem.ID)); 
query = query.And(i => i.Content.Contains(searchTerm)); 
query = query.And(i => i.TemplateName != "MenuFolder"); 

これは私が持っているものですが、私は、「タイトル」フィールドを除外することに何かを追加したいと多分 "SEO"フィールド。だからおそらく何かのように:

query = query.And(i => i.Fields["Title"]; 

しかし、この場合はそれを除外しません。私はできません:

query = query.And(i != i.Fields["Title"]; 

それは受け入れません。

+1

ようになるあなたは 'I =>!I [ "タイトル"]のようなものを意味しています。'(SEARCHTERM)が含まれますか? –

+0

はいそれはうまくいく:)それを書いて、私はそれを受け入れるよ – Keith

答えて

2

はそのi => !i["Title"].Contains(searchTerm)ようなコードを使用してみてください:

Item homeItem = Main.Utilities.SitecoreUtils.getHomeItem(); 

var query = PredicateBuilder.True<SearchResultItem>(); 
query = query.And(i => i.Paths.Contains(homeItem.ID)); 
query = query.And(i => i.Content.Contains(searchTerm)); 
query = query.And(i => i.TemplateName != "MenuFolder"); 

query = query.And(i => !i["Title"].Contains(searchTerm)); 
+0

もう一度男に感謝! – Keith

2

あなたは強く、それを入力したい場合、あなたは自分のフィールド名とSearchResultItemクラスを拡張する必要があります。

public class SitecoreItem : SearchResultItem 
{ 
[IndexField("title")]   
public string Title { get; set; } 

[IndexField("__smallcreateddate")] 
public DateTime PublishDate { get; set; } 

[IndexField("has_presentation")] 
public bool HasPresentation { get; set; } 

} 

次に、あなたのコードは、この

IQueryable<SitecoreItem> query = context.GetQueryable<SitecoreItem>(); 

SearchResults<SitecoreItem> results = null; 
query = query.Where(x => x.Title.Contains(searchText); 

results = query.GetResults(); 
関連する問題