e pi server easy search technical overview
DESCRIPTION
TRANSCRIPT
NetworkedPlanet
EasySearch
Technical Overview
Problem Statement
• Ever seen a website without a full text search?
• BUT– Search is expensive• Financially• Computationally
– Search is complicated• But it doesn’t need to be!
EasySearch
• Simple– Easy to install
• Via EPiServer Manager• Easy to configure
– Edit XML in web.config– Extremely flexible configuration model– Combine and transform individual page properties
• Full IntelliSense support inside Visual Studio
• Inexpensive– FREE for all non-commercial use– NOK30,000 for commercial deployment (approx. £3,000)– Enterprise license pricing available on request
Published Source
• Published on EPiCode by BV Network AS• Bug Tracking– If you see a problem, tell us!
• Feature Tracking– If you want a feature, tell us!
• Wiki– Fostering a user community
Improved Indexing
• Page and files are indexed on EPiServer events– Not visible until publication– Updated when the page or files are– Removed on page or file delete
• No site crawlers– Produces unreliable search anyway– Much more efficient– Pages show up in search results immediately after
publication
Configuration
• Configured within web.config
<indexconfiguration />
<section name="indexconfiguration" type="NetworkedPlanet.EasySearch.Lucene.LuceneSystemConfigurationReader, NetworkedPlanet.EasySearch.Lucene" />
• Index all page types• Joining all string, long string and XHTML properties
Configuration 2
• Index specific page types<indexonconfiguration xmlns="http://www.networkedplanet.com/schema/easysearch/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <pagetype name=“person” /> <pagetype name=“skill” /> <pagetype name=“article” /></indexconfiguration>
• Index specific properties on a page type<indexonconfiguration xmlns="http://www.networkedplanet.com/schema/easysearch/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <pagetype name=“person”> <property name=“description”/> <property name=“EPi_PageName”/> </pagetype></indexconfiguration>
Configuration 3
• Configure storage of specific fields in Lucene<indexonconfiguration xmlns:lucene="http://www.networkedplanet.com/schema/easysearch/configuration/lucene" xmlns="http://www.networkedplanet.com/schema/easysearch/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="lucene:LuceneIndexConfiguration"> <pagetype Name="Person"> <property Name="description“ IncludeInCommonContent="true“ xsi:type="lucene:LuceneProperty“> <lucene:field Name="description“ FieldStore="NO“ FieldTermVector="NO" FieldIndex="TOKENIZED“ Boost="1.2“ /> </property> <property Name="EPi_PageName“ IncludeInCommonContent="true" /> </pagetype></indexconfiguration>
Configuration 4
• Configure the Lucene Index<indexonconfiguration xmlns:lucene="http://www.networkedplanet.com/schema/easysearch/configuration/lucene" xmlns="http://www.networkedplanet.com/schema/easysearch/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="lucene:LuceneIndexConfiguration">
<lucene:configuration RelativeDirecoryPath="EasySearchLuceneIndex" DocumentPrimaryKey="EPi_PageId" DocumentPrimaryKeyField="easysearch_primarykey" DocumentCommonContentField="easysearch_primarycontent" IndexWriterMaximumFieldLength="25000"></indexconfiguration>
EasySearch – Admin Plug-in
• Admin Mode Plug-in• Index Pages• Search Site– Show entire records
Edit Mode Plug-in
• Coming soon!• Allows editors to see how their page will be
indexed.• Run sample searches to find whether page will
be found after publication.• Can be used to prevent/force indexing.• Allows forced customizations to be made to the
search record.• Forces re-indexing of last published.
Developer’s API
• EasySearch Generic API– Simple Search API using back-end query parser– Lucene back-end supports:• Wildcards, Fuzzy Terms, Range Searches, Boosting,
Boolean operators, Escaping
• Lucene Specific API– Provides direct access to the Lucene Query API– Ultimately flexible
Event Pipeline
• Developers can customize indexing process.
• Indexing process is pluggable:– Intercept indexing of a document for modification– Provide .NET code handlers in for modifying or
creating new indexed fields
Provided Web Parts
• EasySearch comes with 3 ASP.NET Web Parts– EasySearchInputWebPart– ESSearchResultsWebPart– PagingWebPart
• All open source – Tailor to your specific site– OR use out of the box
• All connections are interface-based– Allows easily replacement of individual parts
• Supplied demo page shows them working together
EasySearchInputWebPart
• Captures input:– From URL parameters– From HTML form input
• Can apply CSS styles• Hide unwanted fields
ESSearchResultsWebPart
• Produces XML• Web part allows customization using XSLT & CSS
<?xml version="1.0" encoding="utf-8" ?><SearchResults> <SearchResult> <index>3</index> <pageid>2334</pageid> <assettype>page</assettype> <linkurl> /EPiServer1/NetworkedPlanet/EPiServerModuleDemo/Templates/PersonTemplate.aspx?id=2334&epslanguage=en</linkurl> <title>Terry Walker</title> <pagetypename>Person</pagetypename> <pagetypeid>6</pagetypeid> <preview>The rabbit-hole went straight on like a tunnel for some way, and then dipped suddenly down, so suddenly that Alice had not a moment to think about stopping herself before she found herself falling down a very deep well.</preview> <publicationdate>11 Nov 08 02:52</publicationdate> </SearchResult></SearchResults>
ESSearchResultsWebPart
• Ships with XSLT for HTML formatted results
PagingWebPart
• Plugs in to ESSearchResultsWebPart– Allows paging abilities
• Can apply CSS styles• Hide unwanted fields
EasySearch Roadmap• Internationalization Support – DONE!• Security Support - DONE!• Integration with EPiServer Module - DONE!• Indexing of content in UFS - DONE!• Generic Search Results custom control - DONE!• Pluggable Search Pipeline - DONE!• Federated search via OpenSearch - In Progress• Support for multiple EPiServer servers - In Progress• Editor plug-in - In Progress• Synonym Search• Search Statistics
– What people wanted and didn’t find– Common search terms tracking