ปลั๊กอินค้นหาสำหรับ Episerver CMS และ Commerce
รุ่นที่รองรับ. NET 6+ พร้อมใช้งาน ติดต่อ Kristian Borg สำหรับรายละเอียด
ก่อนอื่นคุณต้องสร้างดัชนีของคุณ ไปที่หน้าการดูแลระบบผ่านเครื่องมือค้นหาเมนูแบบฝัง -> การดูแลระบบและสถานะจากนั้นคลิกปุ่ม Create indices
สิ่งนี้จะสร้างหนึ่งดัชนีต่อภาษาในเว็บไซต์ของคุณ หากคุณติดตั้ง Addon Commerce จะมีการสร้างดัชนีเพิ่มเติมสำหรับเนื้อหาแคตตาล็อก

ดัชนีแยกต่างหากจะถูกสร้างขึ้นสำหรับแต่ละภาษาที่ใช้งานอยู่ในเว็บไซต์ของคุณ หากคุณเพิ่มภาษาเพิ่มเติมในภายหลังกระบวนการนี้จะต้องทำซ้ำ
คุณสามารถกำหนดค่าการตั้งค่าของคุณโดยทางโปรแกรมด้วย singleton Epinova.ElasticSearch.Core.Conventions.Indexing ทำสิ่งนี้เพียงครั้งเดียวต่อ AppDomain โดยทั่วไปจะอยู่ในโมดูลที่เริ่มต้นได้หรือ Application_Start ()
คลาสการกำหนดค่าตัวอย่าง:
public static class SearchConfig
{
public static void Init ( )
{
Epinova . ElasticSearch . Core . Conventions . Indexing . Instance
. ExcludeType < ErrorPage > ( )
. ExcludeType < StartPage > ( )
. ExcludeRoot ( 42 )
. IncludeFileType ( "pdf" )
. IncludeFileType ( "docx" )
. ForType < ArticlePage > ( ) . IncludeProperty ( x => x . Changed )
. ForType < ArticlePage > ( ) . IncludeField ( x => x . GetFoo ( ) )
. ForType < ArticlePage > ( ) . IncludeField ( "TenYearsAgo" , x => DateTime . Now . AddYears ( - 10 ) )
. ForType < ArticlePage > ( ) . EnableSuggestions ( x => x . Title )
. ForType < TagPage > ( ) . EnableSuggestions ( )
. ForType < ArticlePage > ( ) . EnableHighlighting ( x => x . MyField )
. ForType < ArticlePage > ( ) . StemField ( x => x . MyField ) ;
}
}คำอธิบายของตัวเลือกต่าง ๆ :
ExcludeType : ประเภทนี้จะไม่ถูกจัดทำดัชนี นอกจากนี้ยังรองรับคลาสพื้นฐานและอินเทอร์เฟซ สามารถทำได้โดยการตกแต่งประเภทของคุณด้วย ExcludeFromSearchAttribute
ExcludeRoot : โหนดนี้และลูก ๆ ของมันจะไม่ได้รับการจัดทำดัชนี โดยทั่วไปแล้วโหนด -ID ในหน้าต้นไม้ Episerver
IncludeFileType : กำหนดส่วนขยายสำหรับประเภทไฟล์ที่ควรจัดทำดัชนี ดูที่ <files> โหนดในการกำหนดค่า
ForType : จุดเริ่มต้นสำหรับกฎการจัดทำดัชนีประเภทใดประเภทหนึ่ง ไม่ทำอะไรในตัวเอง แต่ให้การเข้าถึงตัวเลือกต่อไปนี้:
IncludeField : กำหนดคุณสมบัติที่กำหนดเองที่จะจัดทำดัชนี ตัวอย่างเช่นวิธีการขยายที่ดึงข้อมูลภายนอกหรือดำเนินการรวมที่ซับซ้อน
EnableSuggestions : เสนอข้อมูลที่ดีที่สุดจากประเภทนี้ไม่ว่าจะเป็นจากคุณสมบัติทั้งหมดหรือข้อมูลที่เลือกผ่านนิพจน์แลมบ์ดา
IncludeProperty : เอฟเฟกต์เช่นเดียวกับการตกแต่งคุณสมบัติด้วย [searchable] สามารถใช้งานได้หากคุณไม่ควบคุมแหล่งที่มาของโมเดล
EnableHighlighting : เพิ่มเขตข้อมูลเพิ่มเติมเพื่อเน้น
StemField : กำหนดว่าควรวิเคราะห์คุณสมบัติในภาษาปัจจุบัน คุณสมบัติที่ชื่อว่า MainIntro , MainBody และ Description จะถูกวิเคราะห์เสมอ
โมดูลพยายามทำตามอนุสัญญาเดียวกับ Episerver ซึ่งหมายความว่าคุณสมบัติทั้งหมดของประเภท string และ XhtmlString จะได้รับการจัดทำดัชนีเว้นแต่จะได้รับการตกแต่งอย่างชัดเจนด้วย [Searchable(false)] คุณสมบัติเพิ่มเติมสามารถจัดทำดัชนีโดยการตกแต่งด้วย [Searchable] หรือกับอนุสัญญาข้างต้น ตกแต่ง ContentArea ด้วย [Searchable] เพื่อดัชนีเนื้อหา
SearchResult result = service
. Search ( "bacon" )
. GetResults ( ) ; SearchResult result = service
. Search < ArticlePage > ( "bacon" )
. GetResults ( ) ; SearchResult result = service
. Search < ArticlePage > ( "bacon" )
. InField ( x => x . MainIntro )
. InField ( x => x . MainBody )
. InField ( x => x . MyCustomMethod ( ) )
. GetResults ( ) ;ค้นหาคำที่จัดทำดัชนีเริ่มต้นด้วยวลี:
string [ ] suggestions = service . GetSuggestions ( "baco" ) ;ด้วยความยาวเริ่มต้นอัตโนมัติ (แนะนำ):
SearchResult result = service
. Search < ArticlePage > ( "bacon" )
. Fuzzy ( )
. GetResults ( ) ;ด้วยความยาวเฉพาะ:
SearchResult result = service
. Search < ArticlePage > ( "bacon" )
. Fuzzy ( 4 )
. GetResults ( ) ;ใช้ด้วยความระมัดระวังเนื่องจากไม่สนับสนุนคุณสมบัติเช่นการเกิดขึ้น
SearchResult result = service
. WildcardSearch < ArticlePage > ( "*bacon*" )
. GetResults ( ) ; SearchResult result = service
. WildcardSearch < ArticlePage > ( "me?t" )
. GetResults ( ) ; SearchResult result = service
. SimpleQuerystringSearch < ArticlePage > ( "(bacon | ham) melt -cheese" )
. GetResults ( ) ;กับผู้ให้บริการที่ จำกัด :
SearchResult result = service
. SimpleQuerystringSearch < ArticlePage > ( " " bacon melt " sandwi*" ,
defaultOperator : Operator . And ,
allowedOperators :
SimpleQuerystringOperators . Prefix |
SimpleQuerystringOperators . Phrase ) ;
)
. GetResults ( ) ;ดู https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html สำหรับไวยากรณ์
การใช้คุณสมบัติของประเภท Epinova.ElasticSearch.Core.Models.Properties.GeoPoint ช่วยให้คุณสามารถทำการกรองทางภูมิศาสตร์ได้
ตัวอย่างตัวอย่าง:
public class OfficePage : StandardPage
{
[ Display ]
public virtual double Lat { get ; set ; }
[ Display ]
public virtual double Lon { get ; set ; }
// Helper property, you could always roll an editor for this
public GeoPoint Location => new GeoPoint ( Lat , Lon ) ;
} ค้นหาจุดภายในพื้นที่สี่เหลี่ยมตามมุมบนซ้ายและมุมล่างขวา
var topLeft = ( 59.9277542 , 10.7190847 ) ;
var bottomRight = ( 59.8881646 , 10.7983952 ) ;
SearchResult result = service
. Get < OfficePage > ( )
. FilterGeoBoundingBox ( x => x . Location , , topLeft , bottomRight )
. GetResults ( ) ; ค้นหาจุดภายในวงกลมที่มีจุดกึ่งกลางและระยะทางของรัศมี
var center = ( 59.9277542 , 10.7190847 ) ;
var radius = "10km" ;
SearchResult result = service
. Get < OfficePage > ( )
. FilterGeoDistance ( x => x . Location , radius , center )
. GetResults ( ) ; ค้นหาจุดภายในรูปหลายเหลี่ยมที่มีจำนวนคะแนนโดยพลการ ตัวอย่างรูปหลายเหลี่ยมสามารถเป็นโครงร่างของเมืองประเทศหรือพื้นที่ประเภทอื่น ๆ
var polygons = new [ ]
{
( 59.9702837 , 10.6149134 ) ,
( 59.9459601 , 11.0231964 ) ,
( 59.7789455 , 10.604809 )
} ;
SearchResult result = service
. Get < OfficePage > ( )
. FilterGeoPolygon ( x => x . Location , polygons )
. GetResults ( ) ;ค้นหาเนื้อหาที่คล้ายกับเอกสารที่มีให้
SearchResult result = service
. MoreLikeThis ( "42" )
. GetResults ( ) ;พาณิชย์:
SearchResult result = service
. MoreLikeThis ( "123__CatalogContent" )
. GetResults ( ) ;พารามิเตอร์เสริม:
minimumTermFrequency ความถี่คำต่ำสุดด้านล่างซึ่งคำศัพท์จะถูกละเว้นจากเอกสารอินพุต ค่าเริ่มต้นเป็น 1
maxQueryTerms จำนวนคำค้นหาสูงสุดที่จะเลือก การเพิ่มค่านี้ให้ความแม่นยำมากขึ้นโดยค่าใช้จ่ายของความเร็วในการดำเนินการแบบสอบถาม ค่าเริ่มต้นถึง 25
minimumDocFrequency ความถี่เอกสารขั้นต่ำด้านล่างซึ่งคำศัพท์จะถูกละเว้นจากเอกสารอินพุต ค่าเริ่มต้นถึง 3
minimumWordLength ยาวความยาวคำต่ำสุดด้านล่างซึ่งคำศัพท์จะถูกละเว้น ค่าเริ่มต้นถึง 3
แกดเจ็ต:

หากคุณไม่ต้องการยกเว้นประเภททั่วโลกคุณสามารถทำได้เฉพาะในบริบทของการสืบค้น:
SearchResult result = service
. Search < ArticlePage > ( "bacon" )
. Exclude < SaladPage > ( )
. GetResults ( ) ; ไม่รวมโหนดในเวลาสอบถาม:
SearchResult result = service
. Search < ArticlePage > ( "bacon" )
. Exclude ( 42 )
. Exclude ( contentInstance )
. Exclude ( contentReference )
. GetResults ( ) ; แบบสอบถามใช้ CurrentCulture เป็นค่าเริ่มต้น สิ่งนี้สามารถแทนที่ได้:
SearchResult result = service
. Search < ArticlePage > ( "bacon" )
. Language ( CultureInfo . GetCultureInfo ( "en" ) )
. GetResults ( ) ; ใช้วิธีการ From() และ Size() สำหรับการปนเปื้อนหรือนามแฝง Skip() และ Take() :
SearchResult result = service
. Search < CoursePage > ( "foo" )
. From ( 10 )
. Size ( 20 )
. GetResults ( ) ; var query = service
. Search < CoursePage > ( "foo" )
. FacetsFor ( x => x . DepartmentID ) ; Facets จะถูกสร้างขึ้นจากตัวกรองที่ใช้ในปัจจุบันและไม่ใช่ผลลัพธ์ทั้งหมด
var query = service
. Search < CoursePage > ( "foo" )
. FacetsFor ( x => x . DepartmentID , usePostFilter : false ) ; ค่าเดียว:
string selectedFilter = Request . Querstring [ "filter" ] ;
query = query . Filter ( p => p . DepartmentID , selectedFilter ) ;ค่าเดียวโดยวิธีการขยาย:
string selectedFilter = Request . Querstring [ "filter" ] ;
query = query . Filter ( p => p . GetDepartmentID ( ) , selectedFilter ) ;หลายค่า:
string [ ] selectedFilters = Request . Querstring [ "filters" ] ;
query = query . Filter ( p => p . DepartmentID , selectedFilters ) ;ใช้และตัวดำเนินการเพื่อกรองตัวกรองทั้งหมด:
string [ ] selectedFilters = Request . Querstring [ "filters" ] ;
query = query . Filter ( p => p . DepartmentID , selectedFilters , Operator . And ) ; SearchResult results = query . GetResults ( ) ; foreach ( FacetEntry facet in results . Facets )
{
// facet.Key = name of the property, ie. DepartmentID
// facet.Count = number of unique values for this facet
foreach ( FacetHit hit in facet . Hits )
{
// hit.Key = facet value
// hit.Count = number with this value
}
} ตัวกรองหลายตัวสามารถจัดกลุ่มเพื่อสร้างแบบสอบถามที่ซับซ้อนมากขึ้น
ในตัวอย่างด้านล่างสิ่งต่อไปนี้จะต้องเป็นจริงเพื่อให้การแข่งขัน:
Sizes คือ "xs" หรือ "xl"
ProductCategory คือ "pants"
Brand เป็น "levis" หรือ "diesel"
query = query
. FilterGroup ( group => group
. Or ( page => page . Sizes ( ) , new [ ] { "xs" , "xl" } )
. And ( page => page . ProductCategory , "pants" )
. Or ( page => page . Brand , new [ ] { "levis" , "diesel" } )
) ; หากต้องการ กรอง ค่าบางอย่างให้ใช้ FilterMustNot
var query = service
. Search < PageData > ( "foo" )
. FilterMustNot ( x => x . Title , "bar" ) ; หากต้องการกรองผู้ใช้ปัจจุบัน ACL ให้ใช้ FilterByACL
var query = service
. Search < PageData > ( "foo" )
. FilterByACL ( ) ; EPiServer.Security.PrincipalInfo.Current จะถูกใช้โดยค่าเริ่มต้น แต่สามารถจัดหา PrincipalInfo กำหนดเองได้หากจำเป็น
ในการค้นหาภายในช่วงของค่าที่กำหนดให้ใช้ฟังก์ชัน Range
ประเภทที่รองรับคือ DateTime , double , decimal และ long (รวมถึงการแปลงโดยนัยของ int , byte ฯลฯ )
SearchResult result = service
. Search ( "bacon" )
. Range ( x => x . StartPublish , DateTime . Now . Date , DateTime . Now . Date . AddDays ( 2 ) )
. GetResults ( ) ; SearchResult result = service
. Search ( "bacon" )
. Range ( x => x . MyNumber , 10 , 20 )
. GetResults ( ) ;อาร์กิวเมนต์ที่น้อยกว่านั้นเป็นทางเลือก
SearchResult result = service
. Search ( "bacon" )
. Range ( x => x . MyNumber , 10 ) // Returns anything above 10
. GetResults ( ) ; ในการค้นหาช่วงเวลาภายในช่วงเวลาอื่นคุณสมบัติของคุณจะต้องเป็นประเภท Epinova.ElasticSearch.Core.Models.Properties.IntegerRange
ปัจจุบัน int เป็นประเภทเดียวที่รองรับ
SearchResult result = service
. Search ( "bacon" )
. Range ( x => x . MyRange , 10 , 20 )
. GetResults ( ) ; public class ArticlePage : StandardPage
{
[Display]
public virtual int From { get; set; }
[Display]
public virtual int To { get; set; }
public IntegerRange MyRange => new IntegerRange(From, To);
}
หากคุณสมบัติเป็นประเภท IDictionary<string, object> และทำเครื่องหมาย [Searchable] มันจะถูกจัดทำดัชนีเป็น object ใน Elasticsearch
สิ่งนี้มีประโยชน์ในสถานการณ์ที่คุณมีข้อมูลค่าคีย์แบบไดนามิกซึ่งจะต้องจัดทำดัชนีเช่นจากระบบ PIM
แนวทางคุณสมบัติมาตรฐาน:
public class ProductPage
{
[Searchable]
public IDictionary<string, object> Metadata { get; set; }
}
ข้อมูลจะไม่ถูกส่งคืน แต่คุณสามารถสอบถามและสร้างแง่มุม:
SearchResult result = service
. Search < ProductPage > ( "bacon" )
. InField ( x => x . Metadata + ".SomeKey" )
. FacetsFor ( x => x . Metadata + ".SomeKey" )
. GetResults ( ) ;คุณสมบัติที่กำหนดเอง:
public static class SearchConfig
{
public static void Init ( )
{
Epinova . ElasticSearch . Core . Conventions . Indexing . Instance
. ForType < ProductPage > ( ) . IncludeField ( "Metadata" , x => x . GetPimDataDictionary ( ) ) ;
}
}วิธีการนี้ส่งคืนข้อมูล:
SearchResult result = service
. Search < ProductPage > ( "bacon" )
. GetResults ( ) ;
var hit = result . Hits . First ( ) ;
var dict = hit . Custom [ "Metadata" ] as IDictionary < string , object > คุณสมบัติสามารถเพิ่มขึ้นได้โดยการตกแต่งด้วยแอตทริบิวต์ Boost :
[ Boost ( 13 ) ]
public string Title { get ; set ; }…หรือในเวลาสอบถาม:
SearchResult result = service
. Search ( "bacon" )
. Boost ( x => x . MyProp , 3 )
. GetResults ( ) ;ประเภทสามารถให้ได้ทั้งค่าบวกหรือการเพิ่มเชิงลบ:
SearchResult result = service
. Search ( "bacon" )
. Boost < ArticlePage > ( 2 )
. GetResults ( ) ; SearchResult result = service
. Search ( "bacon" )
. Boost ( typeof ( ArticlePage ) , 2 )
. GetResults ( ) ; SearchResult result = service
. Search ( "bacon" )
. Boost < ArticlePage > ( - 3 )
. GetResults ( ) ;นอกจากนี้คุณยังสามารถเพิ่มฮิตขึ้นอยู่กับตำแหน่งของพวกเขาในแผนผังหน้า:
SearchResult result = service
. Search ( "bacon" )
. BoostByAncestor ( new ContentReference ( 42 ) , 2 )
. GetResults ( ) ; คุณสมบัติวันที่สามารถทำคะแนนได้ลดลงขึ้นอยู่กับค่าของพวกเขาโดยใช้ฟังก์ชัน Decay วิธีนี้คุณสามารถโปรโมตบทความใหม่กว่าบทความเก่ากว่า
SearchResult result = service
. Search ( "bacon" )
. Decay ( x => x . StartPublish , TimeSpan . FromDays ( 7 ) )
. GetResults ( ) ;ทุกครั้งที่ช่วงวันที่ (อาร์กิวเมนต์ที่ 2) เกิดขึ้น 0.5 คะแนนจะถูกลบออกจากคะแนน ในตัวอย่างข้างต้น 0.5 คะแนนจะถูกลบหลังจาก 7 วัน 1 คะแนนหลังจาก 14 วันและอื่น ๆ
ใช้ .UseBestBets() บนแบบสอบถามของคุณเพื่อให้คะแนนเนื้อหาที่เลือกสูงกว่าปกติ
SearchResult result = service
. Search ( "bacon" )
. UseBestBets ( )
. GetResults ( ) ;การเดิมพันที่ดีที่สุดสามารถจัดการได้ผ่านเครื่องมือค้นหาเมนูแบบฝัง -> การเดิมพันที่ดีที่สุด

สถิติง่าย ๆ สามารถรวบรวมได้โดยใช้ฟังก์ชัน .Track() สิ่งนี้จะติดตามจำนวนครั้งที่มีการสอบถามและไม่ว่าจะส่งคืนใด ๆ หรือไม่
SearchResult result = service
. Search ( "bacon" )
. Track ( )
. GetResults ( ) ; 
หมายเหตุ: หากสตริงการเชื่อมต่อของคุณไม่ได้ชื่อว่า EPiServerDB คุณต้องระบุชื่อใน trackingConnectionStringName -configuration ดูการติดตั้ง
stemming เป็นค่าเริ่มต้นที่ใช้กับคุณสมบัติทั้งหมดของประเภท XhtmlString หรือที่ชื่อ MainIntro หรือ MainBody
ภาษาขึ้นอยู่กับภาษาเนื้อหา คุณสมบัติอื่น ๆ ของประเภท string สามารถเกิดขึ้นได้โดยการตกแต่งด้วย Stem -อสังหาริมทรัพย์:
[ Stem ]
public string Title { get ; set ; } หากต้องการแสดงรายการเนื้อหาของบางประเภทโดยไม่มีการให้คะแนนหรือการวิเคราะห์ใด ๆ ให้ใช้ฟังก์ชัน Get สิ่งนี้สามารถใช้ร่วมกับ SortBy สำหรับรายชื่อง่าย ๆ
SearchResult result = service
. StartFrom ( somePageLink )
. Get < ArticlePage > ( )
. GetResults ( ) ; การเรียงลำดับจะดำเนินการโดย Elasticsearch ตามคะแนนของการแข่งขันแต่ละครั้ง การเรียงลำดับด้วยตนเองควรใช้เฉพาะในสถานการณ์ที่ไม่เกี่ยวข้องการให้คะแนนเช่นเมื่อใช้ฟังก์ชั่น Get ที่กล่าวถึงก่อนหน้านี้
SearchResult result = service
. Get < ArticlePage > ( )
. SortBy ( p => p . StartPublish )
. ThenBy ( p => p . Foo )
. ThenBy ( p => p . Bar )
. GetResults ( ) ; เมื่อเรียงลำดับบน geopoint มีข้อโต้แย้งอีกประการหนึ่ง compareTo รายการจะถูกนำไปเปรียบเทียบกับพิกัดเหล่านี้และระยะทางที่ได้จะถูกใช้เป็นค่าเรียงลำดับ
สำหรับการควบคุมแบบสัมบูรณ์คุณสามารถใช้สคริปต์เพื่อเรียงลำดับเอกสาร โปรดทราบว่าสิ่งนี้อาจส่งผลต่อประสิทธิภาพ
ตัวอย่างการเรียงลำดับตามการประทับเวลาที่แน่นอน:
var timestamp = new DateTimeOffset ( new DateTime ( 2019 , 1 , 1 ) ) . ToUnixTimeMilliseconds ( ) ;
var script = $ "doc['StartPublish'].date.getMillis() > { timestamp } ? 0 : 1" ;
SearchResult result = service
. Get < ArticlePage > ( )
. SortByScript ( script , true , "number" )
. GetResults ( ) ;ดู https://www.elastic.co/guide/en/elasticsearch/painless/current/index.html สำหรับไวยากรณ์การเขียนสคริปต์
มีการรวมตัวกรองกรวดที่สามารถแนะนำคำที่คล้ายกันที่พบในดัชนีเมื่อค้นหาคำที่สะกดผิด
ข้อเสนอแนะใด ๆ ที่พบจะรวมอยู่ในคุณสมบัติ DidYouMean ของผลการค้นหา:
SearchResult result = service
. Search ( "alloi" )
. GetResults ( ) ;
string [ ] didYouMean = result . DidYouMean ; // [ "alloy", "all" ] คุณสมบัติใด ๆ ที่ควรทำหน้าที่เป็นแหล่งสำหรับคำแนะนำจะต้องทำเครื่องหมายด้วย [DidYouMeanSource]
public class StandardPage : SitePageData
{
[ DidYouMeanSource ]
public virtual XhtmlString MainBody { get ; set ; }
} ผลลัพธ์ที่ส่งคืนโดย GetResults() ไม่มีความรู้เกี่ยวกับ Episerver ใช้ฟังก์ชั่น GetContentResults() ในบริบทตอน
สิ่งนี้จะใช้ตัวกรอง FilterAccess โดยอัตโนมัติ FilterPublished และ FilterTemplate
IEnumerable < IContent > content = service
. Search < CoursePage > ( text )
. GetContentResults ( ) ; หากคุณต้องการใช้ผู้ให้บริการใด ๆ ที่รวมอยู่เมื่อค้นหาในโหมดแก้ไขให้ไปที่ CMS -> Admin -> Config -> การตั้งค่าเครื่องมือ -> การกำหนดค่าการค้นหา
ติ๊กผู้ให้บริการและลากพวกเขาไปที่ด้านบนของรายการ
คำพ้องความหมายสามารถจัดการได้จากเครื่องมือค้นหาเมนู -> คำพ้องความหมาย
เนื้อหาจะได้รับการจัดทำใหม่โดยอัตโนมัติเมื่อดำเนินการทั่วไปเช่นการเผยแพร่การย้ายและการลบ
หากต้องการทำการจัดทำดัชนีเริ่มต้นของเนื้อหาทั้งหมดให้เรียกใช้งานที่กำหนดเวลา« Elasticsearch: INDEX CMS เนื้อหา»
การจัดทำดัชนีอีกครั้งยังสามารถเรียกใช้ด้วยตนเองในเนื้อหาแต่ละรายการผ่านเครื่องมือเมนู:

…หรือผ่านเมนูบริบทในแผนผังหน้า:

ผลลัพธ์ที่ส่งคืนโดย GetResults() ไม่มีความรู้เกี่ยวกับ Episerver ใช้ฟังก์ชั่น GetCatalogResults() ในบริบทการค้าตอน สิ่งนี้จะเลือกดัชนีที่ถูกต้องโดยอัตโนมัติและใช้ตัวกรอง FilterAccess , FilterPublished และ FilterTemplate
IEnumerable < ProductContent > content = service
. Search < ProductContent > ( text )
. GetCatalogResults ( ) ; เนื้อหาจะได้รับการจัดทำใหม่โดยอัตโนมัติเมื่อดำเนินการทั่วไปเช่นการเผยแพร่การย้ายและการลบ
หากต้องการทำการจัดทำดัชนีเริ่มต้นของเนื้อหาทั้งหมดให้เรียกใช้งานที่กำหนดเวลา« Elasticsearch: Index Commerce Content »
คุณสามารถสลับระหว่าง tokenizer ปกติและ tri -gram (hardcoded เป็น min = 3, max = 3, tokens = digit, char, ต่อคำแนะนำยืดหยุ่น) ผ่านเครื่องมือค้นหาเมนู -> การบริหารและสถานะ
ใช้ฟังก์ Highlight() เพื่อรับข้อความที่ตัดตอนมา 150 อักขระจากจุดที่เกิดขึ้นในข้อความ
SearchResult result = service
. Search ( "bacon" )
. Highlight ( )
. GetContentResults ( ) ; การไฮไลต์นั้นเปิดใช้งานโดยค่าเริ่มต้นบนคุณสมบัติที่ชื่อ MainIntro , MainBody , Attachment และ Description
เครื่องหมายเริ่มต้นคือ <mark>
คุณสามารถปรับแต่งพฤติกรรมนี้ด้วยตัวเลือกการกำหนดค่าต่อไปนี้:
Indexing . Instance . ForType < ArticlePage > ( ) . EnableHighlighting ( x => x . MyField ) ;
Indexing . Instance . SetHighlightFragmentSize ( 42 ) ;
Indexing . Instance . SetHighlightTag ( "blink" ) ; ผลลัพธ์สามารถพบได้ในคุณสมบัติ Highlight ของการโจมตีแต่ละครั้ง
ใช้ฟังก์ชั่น Bulk เพื่อจัดทำดัชนีเนื้อหาที่กำหนดเอง
ตัวอย่าง:
var obj1 = new ComplexType { StringProperty = "this is myobj 1" } ;
var obj2 = new ComplexType { StringProperty = "this is myobj 2" } ;
var obj3 = new ComplexType { StringProperty = "this is myobj 3" } ;
ICoreIndexer indexer = ServiceLocator . Current . GetInstance < ICoreIndexer > ( ) ; // Can also be injected
BulkBatchResult bulk = indexer . Bulk ( new [ ]
{
new BulkOperation ( obj1 , "no" ) ,
new BulkOperation ( obj2 , "no" ) ,
new BulkOperation ( obj3 , "no" )
} ) ;
var results = _service
. Search < ComplexType > ( "myobj" )
. InField ( x => x . StringProperty )
. GetCustomResults ( ) ; หากคุณต้องการดัชนีที่กำหนดเองเพื่อหลีกเลี่ยงการชนเช่นนี้จะต้องจัดทำขึ้นเมื่อทำการจัดทำดัชนีและการค้นหา:
var obj1 = new ComplexType { StringProperty = "this is myobj 1" } ;
var obj2 = new ComplexType { StringProperty = "this is myobj 2" } ;
var obj3 = new ComplexType { StringProperty = "this is myobj 3" } ;
ICoreIndexer indexer = ServiceLocator . Current . GetInstance < ICoreIndexer > ( ) ; // Can also be injected
string indexName = "my-uber-custom-name-no" ;
BulkBatchResult bulk = indexer . Bulk ( new [ ]
{
new BulkOperation ( obj1 , "no" , index : indexName ) ,
new BulkOperation ( obj2 , "no" , index : indexName ) ,
new BulkOperation ( obj3 , "no" , index : indexName )
} ) ;
var results = _service
. UseIndex ( indexName )
. Search < ComplexType > ( "myobj" )
. InField ( x => x . StringProperty )
. GetCustomResults ( ) ; epinova.elasticsearch ใช้ HttpClient มาตรฐานเพื่อเรียก Elasticsearch บางครั้งมันเป็นเรื่องที่จำเป็นในการจัดการข้อความที่ส่งแตกต่างกัน ตัวอย่างเช่นการลงนามคำขอสำหรับบริการคลาวด์
หากคุณต้องการ httpMessageHandlers หลายคนเราขอแนะนำให้คุณผูกมัดพวกเขาก่อนตั้งค่า
ตัวอย่างเช่น:
MessageHandler . Instance . SetMessageHandler ( new AWSHandler ( ) ) ; GetCustomResults ส่งคืนวัตถุที่พิมพ์อย่างรุนแรงเมื่อเทียบกับ GetContentResults ซึ่งส่งคืน ID เท่านั้น
วัตถุที่กำหนดเองไม่จำเป็นต้องใช้คุณสมบัติ Id (หรืออาร์กิวเมนต์ที่เกี่ยวข้องใน CTOR BulkOperation ) แต่ขอแนะนำหากคุณต้องการควบคุมการกำหนดเวอร์ชันและการอัปเดต/การลบ