From 09626d424db7d5f7965782563fa8b16a1d61a741 Mon Sep 17 00:00:00 2001 From: Shandem Date: Thu, 10 Jun 2010 15:50:28 +0000 Subject: [PATCH] Update for Examine DLLs & Examine config. Fixes contextual quick search issue in media section. [TFS Changeset #67764] --- config templates/config/ExamineIndex.config | 40 +- .../config/ExamineSettings.config | 34 +- foreign dlls/Examine.dll | Bin 23552 -> 23552 bytes foreign dlls/Examine.xml | 262 +-- foreign dlls/UmbracoExamine.XML | 1471 +++++++++-------- foreign dlls/UmbracoExamine.dll | Bin 72192 -> 75264 bytes umbraco.sln | 1 - umbraco/presentation/UmbracoContext.cs | 2 +- .../config/ClientDependency.config | 2 +- .../presentation/config/ExamineIndex.config | 36 +- .../config/ExamineSettings.config | 28 +- .../umbraco/Search/quickSearch.js | 30 +- 12 files changed, 942 insertions(+), 964 deletions(-) diff --git a/config templates/config/ExamineIndex.config b/config templates/config/ExamineIndex.config index 0176f78343..37402f08c8 100644 --- a/config templates/config/ExamineIndex.config +++ b/config templates/config/ExamineIndex.config @@ -8,8 +8,8 @@ More information and documentation can be found on CodePlex: http://umbracoexami --> - - + + @@ -17,43 +17,9 @@ More information and documentation can be found on CodePlex: http://umbracoexami - + - - \ No newline at end of file diff --git a/config templates/config/ExamineSettings.config b/config templates/config/ExamineSettings.config index fae3989530..70d7d5ef74 100644 --- a/config templates/config/ExamineSettings.config +++ b/config templates/config/ExamineSettings.config @@ -5,35 +5,23 @@ This configuration file can be extended to add your own search/index providers. Index sets can be defined in the ExamineIndex.config if you're using the standard provider model. More information and documentation can be found on CodePlex: http://umbracoexamine.codeplex.com ---> - - +--> + + - - - - + - - - - + + \ No newline at end of file diff --git a/foreign dlls/Examine.dll b/foreign dlls/Examine.dll index ae9c6d89d287840d4785f069c948947e8355fef0..d81e1822dd60a76e17b76f1915db3003b98eff47 100644 GIT binary patch literal 23552 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 kKJSL3Li2v{Te{Kf;F9?v1v;Y7A literal 23552 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 H8-f1|x^!Vd diff --git a/foreign dlls/Examine.xml b/foreign dlls/Examine.xml index 6dd1925466..4491b1b663 100644 --- a/foreign dlls/Examine.xml +++ b/foreign dlls/Examine.xml @@ -4,6 +4,38 @@ Examine + + + Override this method so that the Distinct() operator works + + + + + + + Override this method so that the Distinct() operator works + + + + + + Returns the key value pair for the index specified + + + + + + + Returns the value for the key specified + + + + + + + a data structure for storing indexing/searching instructions + + An interface representing an Examine Searcher @@ -77,71 +109,6 @@ The default operation. A blank SearchCriteria - - - Override this method so that the Distinct() operator works - - - - - - - Override this method so that the Distinct() operator works - - - - - - Returns the key value pair for the index specified - - - - - - - Returns the value for the key specified - - - - - - - a data structure for storing indexing/searching instructions - - - - - Config section for the Examine search providers - - - - - Gets the search providers. - - The providers. - - - - Gets or sets the default provider. - - The default provider. - - - - Config section for the Examine Index Providers - - - - - Gets the indexing providers. - - The providers. - - - - If true, the IndexingActionHandler will be run to keep the default index up to date. - - Interface to represent an Examine Indexer @@ -158,7 +125,7 @@ Deletes a node from the index - Node to delete + Node to delete @@ -227,11 +194,6 @@ Singleton - - - - - Defines the query methods for the fluent search API @@ -408,27 +370,84 @@ The boolean operation. - + - Passes a text string which is preformatted for the underlying search API. Examine will not modify this + Config section for the Examine search providers + + + + + Gets the search providers. + + The providers. + + + + Gets or sets the default provider. + + The default provider. + + + + Config section for the Examine Index Providers + + + + + Gets the indexing providers. + + The providers. + + + + A collection of Examine Index Providers + + + + + Adds a provider to the collection. + + The provider to be added. + + The collection is read-only. + + + is null. + + + The of is null. + - or - + The length of the of is less than 1. + + + + + + + + Gets the enumerator. - - This allows a developer to completely bypass and Examine logic and comprise their own query text which they are passing in. - It means that if the search is too complex to achieve with the fluent API, or too dynamic to achieve with a static language - the provider can still handle it. - - The query. - + - Indicates the type of data to search on + Returns an object that implements the interface to iterate through the collection. + + An object that implements to iterate through the collection. + - + - Simple class to store the definition of an indexed node + Gets the with the specified name. + + + + + Gets the at the specified index. + + @@ -453,6 +472,28 @@ The index providers. + + + + + + + + Passes a text string which is preformatted for the underlying search API. Examine will not modify this + + + This allows a developer to completely bypass and Examine logic and comprise their own query text which they are passing in. + It means that if the search is too complex to achieve with the fluent API, or too dynamic to achieve with a static language + the provider can still handle it. + + The query. + + + + + Indicates the type of data to search on + + Base class for an Examine Index Provider. You must implement this class to create an IndexProvider @@ -563,6 +604,11 @@ The instance containing the event data. + + + If true, the IndexingActionHandler will be run to keep the default index up to date. + + Determines if the manager will call the indexing methods when content is saved or deleted as @@ -619,56 +665,10 @@ Occurs when node is found but outside the supported node set - + - A collection of Examine Index Providers + Simple class to store the definition of an indexed node - - - Adds a provider to the collection. - - The provider to be added. - - The collection is read-only. - - - is null. - - - The of is null. - - or - - The length of the of is less than 1. - - - - - - - - Gets the enumerator. - - - - - - Returns an object that implements the interface to iterate through the collection. - - - An object that implements to iterate through the collection. - - - - - Gets the with the specified name. - - - - - - Gets the at the specified index. - - - diff --git a/foreign dlls/UmbracoExamine.XML b/foreign dlls/UmbracoExamine.XML index 4e279e72ad..ff5dc124d3 100644 --- a/foreign dlls/UmbracoExamine.XML +++ b/foreign dlls/UmbracoExamine.XML @@ -4,6 +4,116 @@ UmbracoExamine + + + + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Query on the id + + The id. + + + + + Passes a raw search query to the provider to handle + + The query. + + + + + Orders the results by the specified fields + + The field names. + + + + + Orders the results by the specified fields in a descending order + + The field names. + + + + + Internal operation for adding the ordered results + + if set to true [descending]. + The field names. + + + + + Gets the boolean operation which this query method will be added as + + The boolean operation. + + + + + + + + + Internal cache of search results + + + + + Creates the search result from a + + The doc to convert. + The score. + A populated search result object + + + + Skips to a particular point in the search results. + + + This allows for lazy loading of the results paging. We don't go into Lucene until we have to. + + The skip. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets the total number of results for the search + + The total item count. + + + + Default property for accessing Image Sets + + + + An Examine searcher which uses Lucene.Net as the @@ -112,125 +222,84 @@ Name of the Lucene.NET index set - + - Defines XPath statements that map to specific umbraco nodes + Static methods to help query umbraco xml - + - Default property for accessing Image Sets + Converts a content node to XDocument - + + true if data is going to be returned from cache + + + If the type of node is not a Document, the cacheOnly has no effect, it will use the API to return + the xml. + + + + + Converts an to a + + Node to convert + Converted node + + + + Creates an from the collection of + + Elements to create document from + Document containing elements + + + + Converts an umbraco library call to an XDocument + + - + - Manages the delegation of authority over which machine in a load balanced environment will perform the indexing. - This is done by an IO race on initialization of the LuceneExamineIndexer. - If a server's app pool is recycled at a seperate time than the rest of the servers in the cluster, it will generally - take over the executive role (this is dependant on the time that the last latest server's app pool was restarted). - The Executive is determined by file lock (.lck) file, theoretically there should only be one of these. - If there is only 1 server in the cluster, then obviously it is the Executive. - - - - - Fired every 10 minutes by the timer object. This timestamps the EXA file to - enure the system knows that this server is active. - This is to ensure that all systems in a Load Balanced environment are aware of exactly how - many other servers are taking part in the load balancing and who they are. - - - - - - - Creates an xml file to declare that this machine is taking part in the index writing. - This is used to determine the master indexer if this app exists in a load balanced environment. - - - - - Creates a lock file for this machine if there aren't other ones. - - returns true if a lock file was successfully created for this machine. - - - - delete all old lck files (any that are more than cutoffTime old) - - - - - - delete all old exa files (any that are more than cutoffTime old) - - - - - - Get all lck files that are not named by this machines name. If there are any, this means that another machine - has won the race and created the lck file for itself. If there is a lck file with the current machines name, then this - must mean it was previously the master indexer and the apppool has recycled in less than the hour. + Checks if the XElement is an umbraco property based on an alias. + This works for both types of schemas + + - + - Updates the timestamp for lck file if it exists - - - - - Updates the timestamp for the exa file - - - - - Read the machines EXA file + Returns true if the XElement is recognized as an umbraco xml NODE (doc type) + - + - Read the machines LCK file + This takes into account both schemas and returns the node type alias. + If this isn't recognized as an element node, this returns an empty string + - + - This will check for any lock files, not created by the current machine. If there are any, then this machine will flag it's - exa file as not being the master indexer, otherwise, it will try to create it's own lock file to let others know it is the race - winner and therefore the master indexer. If this succeeds, it will update it's exa file to flag it as the master indexer. + Returns the property value for the doc type element (such as id, path, etc...) + If the element is not an umbraco doc type node, or the property name isn't found, it returns String.Empty + + + - + - When the object is disposed, all data should be written - - - - - Ensures there is an elected Executive, otherwise starts the race. - Returns a bool as to whether or not this is the Executive machine. - - - - - Returns a boolean determining whether or not this server involved in a LoadBalanced - environment with Umbraco Examine. - - - - - Returns the machine name of the executive indexer - - - - - The number of servers active in indexing + Returns umbraco value for a data element with the specified alias. + + + @@ -244,58 +313,6 @@ - - - Gets the doc id at a specified index - - The index. - - - - - Gets the doc score for a doc at a specified index - - The index. - - - - - An instance for wiring up Examine to the Umbraco events system - - - - - Creates a new instance of the class - - - - - Only index using providers that SupportUnpublishedContent - - - - - - - Only remove indexes using providers that SupportUnpublishedContent - - - - - - - Only Update indexes for providers that dont SupportUnpublishedContent - - - - - - - Only update indexes for providers that don't SupportUnpublishedContnet - - - - removes html markup from a string @@ -338,28 +355,79 @@ - + - Data service used to query for media + Returns a list of all of the user defined property names in Umbraco + + + + + + Returns a list of all system field names in Umbraco + + + + + + Adds an index field to the collection + + + + + + Default property for accessing an IndexField definition + + Field Name + + + + + An instance for wiring up Examine to the Umbraco events system - + - This is quite an intensive operation... - get all root media, then get the XML structure for all children, - then run xpath against the navigator that's created + Creates a new instance of the class - - + + + + Only index using providers that SupportUnpublishedContent + + + + + + + Only remove indexes using providers that SupportUnpublishedContent + + + + + + + Only Update indexes for providers that dont SupportUnpublishedContent + + + + + + + Only update indexes for providers that don't SupportUnpublishedContnet + + + Extension methods for IndexSet - + - Convert the indexset to indexerdata + Convert the indexset to indexerdata. + This detects if there are no user/system fields specified and if not, uses the data service to look them + up and update the in memory IndexSet. @@ -369,438 +437,6 @@ Returns a string array of all fields that are indexed including Umbraco fields - - - - - - - - Internal cache of search results - - - - - Creates the search result from a - - The doc to convert. - The score. - A populated search result object - - - - Skips to a particular point in the search results. - - - This allows for lazy loading of the results paging. We don't go into Lucene until we have to. - - The skip. - - - - - Gets the enumerator. - - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the total number of results for the search - - The total item count. - - - - - - - - Some links picked up along the way: - - - A matrix of concurrent lucene operations: - http://www.jguru.com/faq/view.jsp?EID=913302. - - - Based on the info here, it is best to only call optimize when there is no activity, - we only optimized after the queue has been processed and at startup: - http://www.gossamer-threads.com/lists/lucene/java-dev/47895 - http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/index/IndexWriter.html - - - - - - Specifies how many index commits are performed before running an optimization - - - - - Used to store a non-tokenized key for the document - - - - - Used to store a non-tokenized type for the document - - - - - Default constructor - - - - - Constructor to allow for creating an indexer at runtime - - - - - - - Set up all properties for the indexer based on configuration information specified. This will ensure that - all of the folders required by the indexer are created and exist. This will also create an instruction - file declaring the computer name that is part taking in the indexing. This file will then be used to - determine the master indexer machine in a load balanced environment (if one exists). - - - - - - - Used to perform thread locking - - - - - used to thread lock calls for creating and verifying folders - - - - - Used for double check locking during an index operation - - - - - Forces a particular XML node to be reindexed - - XML node to reindex - Type of index to use - - - - Rebuilds the entire index from scratch for all index types - - This will completely delete the index and recreate it - - - - Deletes a node from the index - - - - - - Re-indexes all data for the index type specified - - - - - - Adds single node to index. If the node already exists, a duplicate will probably be created, - To re-index, use the ReIndexNode method. - - The node. - The type. - - - - This wil optimize the index for searching, this gets executed when this class instance is instantiated. - - - This can be an expensive operation and should only be called when there is no indexing activity - - - - - Removes the specified term from the index - - - Boolean if it successfully deleted the term, or there were on errors - - - - Ensures that the node being indexed is of a correct type and is a descendent of the parent id specified. - - - - - - - Collects all of the data that needs to be indexed as defined in the index set. - - - - - - - Collects the data for the fields and adds the document. - - - This will normalize (lowercase) all text before it goes in to the index. - - - - - - - - - Process all of the queue items. This checks if this machine is the Executive and if it's in a load balanced - environments. If then acts accordingly: - Not the executive = doesn't index, i - In async mode = use file watcher timer - - - - - Loop through all files in the queue item folder and index them. - Regardless of weather this machine is the executive indexer or not or is in a load balanced environment - or not, this WILL attempt to process the queue items into the index. - - - The number of queue items processed - - - Inheritors should be very carefly using this method, SafelyProcessQueueItems will ensure - that the correct machine processes the items into the index. SafelyQueueItems calls this method - if it confirms that this machine is the one to process the queue. - - - - - Returns an XDocument for the entire tree stored for the IndexType specified. - - - - - - - - Saves a file indicating that the executive indexer should remove the from the index those that match - the term saved in this file. - This will save a file prefixed with the current machine name with an extension of .dev - - - - - - Writes the information for the fields to a file names with the computer's name that is running the index and - a GUID value. The indexer will then index the values stored in the files in another thread so that processing may continue. - This will save a file prefixed with the current machine name with an extension of .add - - - - - - - Handles the file watcher timer poll elapsed event - This will: - - Disable the FileSystemWatcher - - Recursively process all queue items in the folder and check after processing if any more files have been added - - Once there's no more files to be processed, re-enables the watcher - - - - - - - Checks the writer passed in to see if it is active, if not, checks if the index is locked. If it is locked, - returns checks if the reader is not null and tries to close it. if it's still locked returns null, otherwise - creates a new writer. - - - - - - - Checks the reader passed in to see if it is active, if not, checks if the index is locked. If it is locked, - returns checks if the writer is not null and tries to close it. if it's still locked returns null, otherwise - creates a new reader. - - - - - - - Reads the FileInfo passed in into a dictionary object and deletes it from the index - - - - - - Reads the FileInfo passed in into a dictionary object and adds it to the index - - - - - - All field data will be stored into Lucene as is except for dates, these can be stored as standard: yyyyMMdd - Any standard text will be put in lower case format. - - - - - - - Adds all nodes with the given xPath root. - - The x path. - The type. - - - - Creates the folder if it does not exist. - - - - - - Checks if the index is ready to open/write to. - - - - - - Check if there is an index in the index folder - - - - - - When the object is disposed, all data should be written - - - - - The data service used for retreiving and submitting data to the cms - - - - - The analyzer to use when indexing content, by default, this is set to StandardAnalyzer - - - - - Used to keep track of how many index commits have been performed. - This is used to determine when index optimization needs to occur. - - - - - Indicates whether or this system will process the queue items asynchonously. Default is true. - - - - - The interval (in seconds) specified for the timer to process index queue items. - This is only relavent if is true. - - - - - The folder that stores the Lucene Index files - - - - - The folder that stores the index queue files - - - - - The Executive to determine if this is the master indexer - - - - - The index set name which references an Examine - - - - - By default this is false, if set to true then the indexer will include indexing content that is flagged as publicly protected. - This property is ignored if SupportUnpublishedContent is set to true. - - - - - Occurs when [index optimizing]. - - - - - Occurs when [document writing]. - - - - - Determines if the manager will call the indexing methods when content is saved or deleted as - opposed to cache being updated. - - - - - - From: http://stackoverflow.com/questions/83152/reading-pdf-documents-in-net/84410#84410 - - - - - The number of characters to keep, when extracting text. - - - - - Extracts a text from a PDF file. - - the full path to the pdf file. - the output file name. - the extracted text - - - - This method processes an uncompressed Adobe (text) object - and extracts text. - - uncompressed - - - - - Check if a certain 2 character token just came along (e.g. BT) - - the searched token - the recent character array - - - - - Default property for accessing an IndexField definition - - Field Name - - Initializes a new instance of the class. @@ -979,140 +615,584 @@ The boolean operation. - + + + Manages the delegation of authority over which machine in a load balanced environment will perform the indexing. + This is done by an IO race on initialization of the LuceneExamineIndexer. + If a server's app pool is recycled at a seperate time than the rest of the servers in the cluster, it will generally + take over the executive role (this is dependant on the time that the last latest server's app pool was restarted). + The Executive is determined by file lock (.lck) file, theoretically there should only be one of these. + If there is only 1 server in the cluster, then obviously it is the Executive. + + + + + Fired every 10 minutes by the timer object. This timestamps the EXA file to + enure the system knows that this server is active. + This is to ensure that all systems in a Load Balanced environment are aware of exactly how + many other servers are taking part in the load balancing and who they are. + + + + + + + Creates an xml file to declare that this machine is taking part in the index writing. + This is used to determine the master indexer if this app exists in a load balanced environment. + + + + + Creates a lock file for this machine if there aren't other ones. + + returns true if a lock file was successfully created for this machine. + + + + delete all old lck files (any that are more than cutoffTime old) + + + + + + delete all old exa files (any that are more than cutoffTime old) + + + + + + Get all lck files that are not named by this machines name. If there are any, this means that another machine + has won the race and created the lck file for itself. If there is a lck file with the current machines name, then this + must mean it was previously the master indexer and the apppool has recycled in less than the hour. + + + + + + Updates the timestamp for lck file if it exists + + + + + Updates the timestamp for the exa file + + + + + Read the machines EXA file + + + + + + Read the machines LCK file + + + + + + This will check for any lock files, not created by the current machine. If there are any, then this machine will flag it's + exa file as not being the master indexer, otherwise, it will try to create it's own lock file to let others know it is the race + winner and therefore the master indexer. If this succeeds, it will update it's exa file to flag it as the master indexer. + + + + + When the object is disposed, all data should be written + + + + + Ensures there is an elected Executive, otherwise starts the race. + Returns a bool as to whether or not this is the Executive machine. + + + + + Returns a boolean determining whether or not this server involved in a LoadBalanced + environment with Umbraco Examine. + + + + + Returns the machine name of the executive indexer + + + + + The number of servers active in indexing + + + + + Gets the doc id at a specified index + + The index. + + + + + Gets the doc score for a doc at a specified index + + The index. + + + - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Query on the id - - The id. - - - - - Passes a raw search query to the provider to handle - - The query. - - - - - Orders the results by the specified fields - - The field names. - - - - - Orders the results by the specified fields in a descending order - - The field names. - - - - - Internal operation for adding the ordered results - - if set to true [descending]. - The field names. - - - - - Gets the boolean operation which this query method will be added as - - The boolean operation. - - - - Static methods to help query umbraco xml - - - - - Converts a content node to XDocument - - - true if data is going to be returned from cache - - If the type of node is not a Document, the cacheOnly has no effect, it will use the API to return - the xml. + + Some links picked up along the way: + + + A matrix of concurrent lucene operations: + http://www.jguru.com/faq/view.jsp?EID=913302. + + + Based on the info here, it is best to only call optimize when there is no activity, + we only optimized after the queue has been processed and at startup: + http://www.gossamer-threads.com/lists/lucene/java-dev/47895 + http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/index/IndexWriter.html + - + - Converts an to a + Specifies how many index commits are performed before running an optimization - Node to convert - Converted node - + - Creates an from the collection of + Used to store a non-tokenized key for the document - Elements to create document from - Document containing elements - + - Converts an umbraco library call to an XDocument + Used to store a non-tokenized type for the document - + + + + Used to store the path of a content object + + + + + Default constructor + + + + + Constructor to allow for creating an indexer at runtime + + + + + + + Set up all properties for the indexer based on configuration information specified. This will ensure that + all of the folders required by the indexer are created and exist. This will also create an instruction + file declaring the computer name that is part taking in the indexing. This file will then be used to + determine the master indexer machine in a load balanced environment (if one exists). + + + + + + + Used to perform thread locking + + + + + used to thread lock calls for creating and verifying folders + + + + + Used for double check locking during an index operation + + + + + We need an internal searcher used to search against our own index. + This is used for finding all descendant nodes of a current node when deleting indexes. + + + + + Forces a particular XML node to be reindexed + + XML node to reindex + Type of index to use + + + + Rebuilds the entire index from scratch for all index types + + This will completely delete the index and recreate it + + + + Deletes a node from the index. + + + When a content node is deleted, we also need to delete it's children from the index so we need to perform a + custom Lucene search to find all decendents and create Delete item queues for them too. + + ID of the node to delete + + + + Re-indexes all data for the index type specified + + + + + + Adds single node to index. If the node already exists, a duplicate will probably be created, + To re-index, use the ReIndexNode method. + + The node. + The type. + + + + This wil optimize the index for searching, this gets executed when this class instance is instantiated. + + + This can be an expensive operation and should only be called when there is no indexing activity + + + + + Removes the specified term from the index + + + Boolean if it successfully deleted the term, or there were on errors + + + + Ensures that the node being indexed is of a correct type and is a descendent of the parent id specified. + + - + - Checks if the XElement is an umbraco property based on an alias. - This works for both types of schemas + Collects all of the data that needs to be indexed as defined in the index set. + + + + + + + Collects the data for the fields and adds the document which is then committed into Lucene.Net's index + + + This will normalize (lowercase) all text before it goes in to the index. + + + + + + The path of the content node + + + + Process all of the queue items. This checks if this machine is the Executive and if it's in a load balanced + environments. If then acts accordingly: + Not the executive = doesn't index, i + In async mode = use file watcher timer + + + + + Loop through all files in the queue item folder and index them. + Regardless of weather this machine is the executive indexer or not or is in a load balanced environment + or not, this WILL attempt to process the queue items into the index. + + + The number of queue items processed + + + Inheritors should be very carefully using this method, SafelyProcessQueueItems will ensure + that the correct machine processes the items into the index. SafelyQueueItems calls this method + if it confirms that this machine is the one to process the queue. + + + + + Returns an XDocument for the entire tree stored for the IndexType specified. + + + + + + + + Saves a file indicating that the executive indexer should remove the from the index those that match + the term saved in this file. + This will save a file prefixed with the current machine name with an extension of .del + + + + + + Writes the information for the fields to a file names with the computer's name that is running the index and + a GUID value. The indexer will then index the values stored in the files in another thread so that processing may continue. + This will save a file prefixed with the current machine name with an extension of .add + + + + + The path of the content node + + + + Handles the file watcher timer poll elapsed event + This will: + - Disable the FileSystemWatcher + - Recursively process all queue items in the folder and check after processing if any more files have been added + - Once there's no more files to be processed, re-enables the watcher + + + + + + + Checks the writer passed in to see if it is active, if not, checks if the index is locked. If it is locked, + returns checks if the reader is not null and tries to close it. if it's still locked returns null, otherwise + creates a new writer. + + + + + + + + Checks the reader passed in to see if it is active, if not, checks if the index is locked. If it is locked, + returns checks if the writer is not null and tries to close it. if it's still locked returns null, otherwise + creates a new reader. + + + + + + + + Reads the FileInfo passed in into a dictionary object and deletes it from the index - - - + - Returns true if the XElement is recognized as an umbraco xml NODE (doc type) + Reads the FileInfo passed in into a dictionary object and adds it to the index + - + - This takes into account both schemas and returns the node type alias. - If this isn't recognized as an element node, this returns an empty string + All field data will be stored into Lucene as is except for dates, these can be stored as standard: yyyyMMdd + Any standard text will be put in lower case format. - + - + - Returns the property value for the doc type element (such as id, path, etc...) - If the element is not an umbraco doc type node, or the property name isn't found, it returns String.Empty + Adds all nodes with the given xPath root. + + The x path. + The type. + + + + Creates the folder if it does not exist. + + + + + + Checks if the index is ready to open/write to. - - - + - Returns umbraco value for a data element with the specified alias. + Check if there is an index in the index folder - - + + + When the object is disposed, all data should be written + + + + + The data service used for retreiving and submitting data to the cms + + + + + The analyzer to use when indexing content, by default, this is set to StandardAnalyzer + + + + + Used to keep track of how many index commits have been performed. + This is used to determine when index optimization needs to occur. + + + + + Indicates whether or this system will process the queue items asynchonously. Default is true. + + + + + The interval (in seconds) specified for the timer to process index queue items. + This is only relavent if is true. + + + + + The folder that stores the Lucene Index files + + + + + The folder that stores the index queue files + + + + + The Executive to determine if this is the master indexer + + + + + The index set name which references an Examine + + + + + By default this is false, if set to true then the indexer will include indexing content that is flagged as publicly protected. + This property is ignored if SupportUnpublishedContent is set to true. + + + + + Occurs when [index optimizing]. + + + + + Occurs when [document writing]. + + + + + Determines if the manager will call the indexing methods when content is saved or deleted as + opposed to cache being updated. + + + + + + From: http://stackoverflow.com/questions/83152/reading-pdf-documents-in-net/84410#84410 + + + + + The number of characters to keep, when extracting text. + + + + + Extracts a text from a PDF file. + + the full path to the pdf file. + the output file name. + the extracted text + + + + This method processes an uncompressed Adobe (text) object + and extracts text. + + uncompressed + + + + + Check if a certain 2 character token just came along (e.g. BT) + + the searched token + the recent character array + + + + + Data service used to query for media + + + + + This is quite an intensive operation... + get all root media, then get the XML structure for all children, + then run xpath against the navigator that's created + + + + + + + A class that defines the type of index for each Umbraco field (non user defined fields) + Alot of standard umbraco fields shouldn't be tokenized or even indexed, just stored into lucene + for retreival after searching. + + + + + return the index policy for the field name passed in, if not found, return normal + + + + + + + Methods to support Umbraco XSLT extensions + + + + + Uses the default provider specified to search, returning an XPathNodeIterator + + The search query + A node-set of the search results + + + + Uses the provider specified to search, returning an XPathNodeIterator + + + + + + + + + Uses the default provider specified to search, returning an XPathNodeIterator + + The search query + Enable a wildcard search query + A node-set of the search results + Event arguments for a Document Writing event @@ -1141,6 +1221,11 @@ NodeId of the document being written + + + Defines XPath statements that map to specific umbraco nodes + + Deletes all files in the folder and returns the number deleted. @@ -1148,20 +1233,6 @@ - - - A class that defines the type of index for each Umbraco field (non user defined fields) - Alot of standard umbraco fields shouldn't be tokenized or even indexed, just stored into lucene - for retreival after searching. - - - - - return the index policy for the field name passed in, if not found, return normal - - - - The folder path of where the lucene index is stored diff --git a/foreign dlls/UmbracoExamine.dll b/foreign dlls/UmbracoExamine.dll index ae7f3cabc73adaf47b510dfd1111755fac56665e..72badd63d35649954b21722bd01e4e1bcd335e97 100644 GIT binary patch literal 75264 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

e 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 literal 72192 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 Sm_hx-U+ro94Emo81OFFc8Vr{J diff --git a/umbraco.sln b/umbraco.sln index 5356db8d68..90600fca45 100644 --- a/umbraco.sln +++ b/umbraco.sln @@ -34,7 +34,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{05329D config templates\config\404handlers.config = config templates\config\404handlers.config config templates\config\ClientDependency.config = config templates\config\ClientDependency.config config templates\config\Dashboard.config = config templates\config\Dashboard.config - umbraco\presentation\config\ExamineIndex.config = umbraco\presentation\config\ExamineIndex.config config templates\config\ExamineIndex.config = config templates\config\ExamineIndex.config config templates\config\ExamineSettings.config = config templates\config\ExamineSettings.config config templates\config\formHandlers.config = config templates\config\formHandlers.config diff --git a/umbraco/presentation/UmbracoContext.cs b/umbraco/presentation/UmbracoContext.cs index 42353d7178..c2e8719474 100644 --- a/umbraco/presentation/UmbracoContext.cs +++ b/umbraco/presentation/UmbracoContext.cs @@ -215,7 +215,7 @@ namespace umbraco.presentation { get { - return ExamineManager.Instance.SearchProviderCollection["InternalSearch"]; + return ExamineManager.Instance.SearchProviderCollection["InternalSearcher"]; } } } diff --git a/umbraco/presentation/config/ClientDependency.config b/umbraco/presentation/config/ClientDependency.config index 4b75d9f81a..135df0ecde 100644 --- a/umbraco/presentation/config/ClientDependency.config +++ b/umbraco/presentation/config/ClientDependency.config @@ -10,7 +10,7 @@ NOTES: * Compression/Combination/Minification is not enabled unless debug="false" is specified on the 'compiliation' element in the web.config * A new version will invalidate both client and server cache and create new persisted files --> - + diff --git a/umbraco/presentation/config/ExamineIndex.config b/umbraco/presentation/config/ExamineIndex.config index c0e8ffb617..37402f08c8 100644 --- a/umbraco/presentation/config/ExamineIndex.config +++ b/umbraco/presentation/config/ExamineIndex.config @@ -8,7 +8,7 @@ More information and documentation can be found on CodePlex: http://umbracoexami --> - + @@ -22,38 +22,4 @@ More information and documentation can be found on CodePlex: http://umbracoexami - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/umbraco/presentation/config/ExamineSettings.config b/umbraco/presentation/config/ExamineSettings.config index 9898df0497..487cc8c671 100644 --- a/umbraco/presentation/config/ExamineSettings.config +++ b/umbraco/presentation/config/ExamineSettings.config @@ -6,35 +6,21 @@ Index sets can be defined in the ExamineIndex.config if you're using the standar More information and documentation can be found on CodePlex: http://umbracoexamine.codeplex.com --> - - + + - - - - - - + - - - - - + diff --git a/umbraco/presentation/umbraco/Search/quickSearch.js b/umbraco/presentation/umbraco/Search/quickSearch.js index 2e7a7cdfd7..1c9fe0f82a 100644 --- a/umbraco/presentation/umbraco/Search/quickSearch.js +++ b/umbraco/presentation/umbraco/Search/quickSearch.js @@ -1,9 +1,10 @@ -(function($) { +(function ($) { - $.fn.UmbQuickSearch = function(url) { + $.fn.UmbQuickSearch = function (url) { - var getSearchApp = function() { - return (UmbClientMgr.mainWindow().location.hash != "" && UmbClientMgr.mainWindow().location.hash.toLowerCase().substring(1)) == "media".toLowerCase() + var getSearchApp = function () { + return (UmbClientMgr.mainWindow().location.hash != "" + && UmbClientMgr.mainWindow().location.hash.toLowerCase().substring(1)) == "media".toLowerCase() ? "Media" : "Content"; }; @@ -17,14 +18,14 @@ matchContains: false, extraParams: { //return the current app, if it's not media, then it's Content as this is the only searches that are supported. - app: function() { + app: function () { return getSearchApp(); }, - rnd: function() { + rnd: function () { return Umbraco.Utils.generateRandom(); } }, - parse: function(data) { + parse: function (data) { var parsed = []; for (var i = 0; i < data.length; i++) { parsed[parsed.length] = { @@ -35,29 +36,30 @@ } return parsed; }, - formatItem: function(item) { + formatItem: function (item) { return item.Fields.nodeName + " (" + item.Id + ")"; } }; $(this) .autocomplete(url, acOptions) - .result(function(e, data) { - UmbClientMgr.contentFrame().location.href = "editContent.aspx?id=" + data.Id; + .result(function (e, data) { + var url = getSearchApp() == "Media" ? "editMedia.aspx" : "editContent.aspx"; + UmbClientMgr.contentFrame().location.href = url + "?id=" + data.Id; $("#umbSearchField").val(UmbClientMgr.uiKeys()["general_typeToSearch"]); right.focus(); }); - - $(this).focus(function() { + + $(this).focus(function () { $(this).val(''); }); - $(this).blur(function() { + $(this).blur(function () { $(this).val(UmbClientMgr.uiKeys()["general_typeToSearch"]); }); - $(this).keyup(function(e) { + $(this).keyup(function (e) { if (e.keyCode == 13) { UmbClientMgr.openModalWindow('dialogs/search.aspx?rndo=' + Umbraco.Utils.generateRandom() + '&search=' + jQuery(this).val() + '&app=' + getSearchApp(), 'Search', true, 620, 470);