Patent ID: 12210518

DETAILED DESCRIPTION

Various examples of the present technology are discussed in detail below. While specific implementations are discussed, it should be understood that this is done for illustration purposes only. A person skilled in the relevant art will recognize that other components and configurations may be used without parting from the spirit and scope of the present technology.

The one or more techniques disclosed herein address the need in the art for providing users with one or more corrected search suggestions upon receiving a search request. For example, the one or more techniques described herein leverage a personalized vocabulary that is created for each user registered with a content management system. The personalized vocabulary may include an index of a plurality of terms and/or phrases contained in content items associated with the user. In some embodiments, the personalized vocabulary may be indexed by frequency of occurrence. In some embodiments, the personalized vocabulary may include more granular information, such as, but not limited to, a location of each occurrence of a term and/or phrase within the user's underlying folder structure, a type of device that provided each term and/or phrase, a date associated with each term and/or phrase, and the like.

In operation, content management system may leverage the personalized vocabulary to provide more accurate search term suggestions to a user. For example, upon receiving a query, content management system may determine that a term in the query fails to occur at least a threshold number of times in personalized vocabulary. In some embodiments, a threshold number of times may be at least one time. Accordingly, content management system may utilize personalized vocabulary to determine what the user may have meant to submit as a search request. By utilizing personalized vocabulary, content management system may provide a more accurate search term suggestion to the user.

FIG.1is a block diagram illustrating a system configuration100, according to example embodiments. System configuration100may include a content management system110interacting with a client device150.

Content management system110may include one or more components. For example, as illustrated, content management system110may include content management service116, event service118, notification service120, web interface service124, collaboration content management service126, and sharing service128. In some embodiments, content management system110may further include one or more storage items. Such storage items may include, but are not limited to, server file journal148, account database140, events143, content directory144, access control list (ACL)145, content storage142, and metadata database146.

Content management system110may communicate with client device150via network105. Network105may be of any suitable type, including individual connections via the Internet, such as cellular or Wi-Fi networks. In some embodiments, network105may connect terminals, services, and mobile devices using direct connections, such as radio frequency identification (RFID), near-field communication (NFC), Bluetooth™, low-energy Bluetooth™ (BLE), Wi-Fi™ ZigBee™, ambient backscatter communication (ABC) protocols, USB, WAN, or LAN. Because the information transmitted may be personal or confidential, security concerns may dictate one or more of these types of connection be encrypted or otherwise secured. In some embodiments, however, the information being transmitted may be less personal, and therefore, the network connections may be selected for convenience over security.

Network105may include any type of computer networking arrangement used to exchange data. For example, network105may include any type of computer networking arrangement used to exchange information. For example, network105may be the Internet, a private data network, virtual private network using a public network and/or other suitable connection(s) that enables components in system configuration100to send and receiving information between the components of system configuration100.

Client device150may include one or more components. For example, as illustrated, client device150may include client application152, content item synchronization service154, file system extension153, and client collaboration service160. In some embodiments, client device150may further include one or more storage components. As illustrated, client device150may include storage index164.

Accounts

Content management system110can store content items in association with accounts, as well as perform a variety of content item management tasks, such as retrieve, modify, browse, and/or share the content item(s) (e.g., collaboration documents). Furthermore, content management system110can enable an account to access collaboration document(s) from multiple client devices.

Content management system110supports a plurality of accounts. An entity (user, group of users, company, etc.) can create an account with content management system, and account details can be stored in account database140. Account database140can store profile information for registered entities. In some cases, profile information for registered entities includes a username and/or email address. Account database140can include account management information, such as account type (e.g. various tiers of free or paid accounts), storage space allocated, storage space used, client devices150having a registered content management client application152resident thereon, security settings, personal configuration settings, etc.

Account database140can store groups of accounts associated with an entity. Groups can have permissions based on group policies and/or access control lists, and members of the groups can inherit the permissions. For example, a marketing group can have access to one set of collaboration documents while an engineering group can have access to another set of collaboration documents. An administrator group can modify groups, modify user accounts, etc.

Content Item Storage

A feature of content management system110is the storage of content items, which can be stored in content storage142. As used herein, content items can be any digital data such as documents, collaborative content items, text files, audio files, image files, video files, webpages, executable files, binary files, messages, etc. A content item can also include collections or other mechanisms for grouping content items together with different behaviors, such as folders, zip files, playlists, albums, etc. A collection can refer to a folder, or a plurality of content items that are related or grouped by a common attribute. Content items can also include hyperlinks, shortcuts or placeholder files storing metadata identifying other content items, such as other content items stored on content management system110or on a third-party content management system. In some embodiments, content storage142is combined with other types of storage or databases to handle specific functions. Content storage142can store content items, while metadata regarding the content items can be stored in metadata database146. Likewise, data regarding where a content item is stored in content storage142can be stored in content directory144. Additionally, data regarding changes, access, etc. can be stored in server file journal148. Each of the various storages/databases such as content storage142, content directory144, server file journal148, and metadata database146can be comprised of more than one such storage or database and can be distributed over many devices and locations. Other configurations are also possible. For example, data from content storage142, content directory144, server file journal148, and/or metadata database146may be combined into one or more content storages or databases or further segmented into additional content storages or databases. Thus, content management system110may include more or less storages and/or databases than shown inFIG.1.

In some embodiments, content storage142is associated with at least one content management service116, which includes software or other processor executable instructions for managing the storage of content items including, but not limited to, receiving content items for storage, preparing content items for storage, selecting a storage location for the content item, retrieving content items from storage, etc. In some embodiments, content management service116can divide a content item into smaller chunks for storage at content storage142. The location of each chunk making up a content item can be recorded in content directory144. Content directory144can include a content entry for each content item stored in content storage142. The content entry can be associated with a unique ID, which identifies a content item.

In some embodiments, the unique ID, which identifies a content item in content directory144, can be derived from a deterministic hash function. This method of deriving a unique ID for a content item can ensure that content item duplicates are recognized as such since the deterministic hash function will output the same identifier for every copy of the same content item, but will output a different identifier for a different content item. Using this methodology, content management service116can output a unique ID for each content item.

Content management service116can also designate or record a content path for a content item. The content path can include the name of the content item and/or folder hierarchy associated with the content item. For example, the content path can include a folder or path of folders in which the content item is stored in a local file system on a client device. Content management service116can use the content path to present the content items in the appropriate folder hierarchy, such as a tree-like directory structure. While content items are stored in content storage142in blocks and may not be stored under a tree like directory structure, such directory structure is a comfortable navigation structure for users. Content management service116can define or record a content path for a content item wherein the “root” node of a directory structure can be a namespace for each account. Within the namespace can be a directory structure defined by a user of an account and/or content management service116. Content directory144can store the content path for each content item as part of a content entry.

In some embodiments the namespace can include additional namespaces that appear in the directory structure as if they are stored within the root node. This can occur when an account has access to a shared collection. Shared collections can be assigned their own namespace within content management system110. While shared collections are actually a root node for the shared collection, they are located subordinate to the user account namespace in the directory structure, and can appear as a folder within a folder for the user account. As addressed above, the directory structure is merely a comfortable navigation structure for users, but does not correlate to storage locations of content items in content storage142.

While the directory structure in which an account views content items does not correlate to storage locations at content management system110, the directory structure can correlate to storage locations on client device150depending on the file system used by client device150. As addressed above, a content entry in content directory144can also include the location of each chunk making up a content item. More specifically, the content entry can include content pointers that identify the location in content storage142of the chunks that make up the content item.

In addition to a content path and content pointer, a content entry in content directory144can also include a user account identifier that identifies the user account that has access to the content item and/or a group identifier that identifies a group with access to the content item. In some embodiments, multiple user account identifiers can be associated with a single content entry indicating that the content item has shared access by the multiple user accounts. In some embodiments, user account identifiers associated with a single content entry can specify different permissions for the associated content item. In some embodiments, content directory144can describe a hierarchical structure of content items associated with a user account, the hierarchical structure being specific to the user account.

Content management service116can decrease the amount of storage space required by identifying duplicate content items or duplicate blocks that make up a content item or versions of a content item. Instead of storing multiple copies, content storage142can store a single copy of the content item or block of the content item and content directory144can include a pointer or other mechanism to link the duplicates to the single copy.

Content management service116can also store metadata describing content items, content item types, folders, file path, and/or the relationship of content items to various accounts, collections, or groups in metadata database146, in association with the unique ID of the content item.

Content management service116can also store a log of data regarding changes, access, etc. in server file journal148. Server file journal148can include the unique ID of the content item and a description of the change or access action along with a time stamp or version number and any other relevant data. Server file journal148can also include pointers to blocks affected by the change or content item access. Content management service can provide the ability to undo operations, by using a content item version control that tracks changes to content items, different versions of content items (including diverging version trees), and a change history that can be acquired from the server file journal148. The change history can include a set of changes that, when applied to the original content item version, produce the changed content item version.

Content Item Synchronization

Another feature of content management system110is synchronization of content items with at least one client device150. Client device(s) can take different forms and have different capabilities. For example, client device170can be a computing device having a local file system accessible by multiple applications resident thereon. Client device172can be a computing device wherein content items are only accessible to a specific application or by permission given by the specific application, and the content items are stored either in an application specific space or in the cloud. Client device174can be any client device accessing content management system110via a web browser and accessing content items via a web interface. While example client devices170,172, and174are depicted in form fusers such as a laptop, mobile device, or web browser, it should be understood that the descriptions thereof are not limited to devices of these example form fusers. For example, a mobile device such as client172might have a local file system accessible by multiple applications resident thereon, or client172might access content management system110via a web browser. As such, the form fuser should not be considered limiting when considering client150′s capabilities. One or more functions described herein with respect to client device150may or may not be available on every client device depending on the specific capabilities of the device—the file access model being one such capability.

In many embodiments, client devices are associated with an account of content management system110, but in some embodiments client devices can access content using shared links and do not require an account.

As noted above, some client devices can access content management system110using a web browser. However, client devices can also access content management system110using client application152stored and running on client device150. Client application152can include a content item synchronization service154.

Content item synchronization service154can be in communication with content management service116to synchronize changes to content items between client device150and content management system110.

Client device150can synchronize content with content management system110via content synchronization service154. The synchronization can be platform agnostic. That is, content can be synchronized across multiple client devices of varying type, capabilities, operating systems, etc. Content synchronization service154can synchronize any changes (new, deleted, modified, copied, or moved content items) to content items in a designated location of a file system of client device150.

Content items can be synchronized from client device150to content management system110, and vice versa. In embodiments wherein synchronization is from client device150to content management system110, a user can manipulate content items directly from the file system of client device150, while file system extension154(which can be integrated with the local file system, or even the operating system kernel) can intercept read, write, copy, move, delete, add, modify, etc. commands relative to content items in the designated location of the file system of client device150.

When file system extension153notices a write, move, copy, or delete command, it can notify content item synchronization service154, which can synchronize the changes to content management system service116. In some embodiments, content item synchronization service154can perform some functions of content management system service116including functions addressed above such as dividing the content item into blocks, hashing the content item to generate a unique identifier, etc. Content synchronization service154can index content within client storage index164and save the result in storage index164. Indexing can include creating a unique identifier for each content item. In some embodiments, content synchronization service154creates this unique identifier by putting the data of the content item (e.g., excluding the filename and/or other metadata) through a hash function; as addressed above, content management system can use a similar process to provide identifiers to content on content management system110.

Content synchronization service154can use storage index164to facilitate the synchronization of at least a portion of the content within client storage with content associated with a user account on content management system110. For example, content synchronization service154can compare storage index164with content management system110and detect differences between content on client storage and content associated with a user account on content management system110. Content synchronization service154can then attempt to reconcile differences by uploading, downloading, modifying, and deleting content on client storage as appropriate. Content management service116can store the changed or new block for the content item and update server file journal148, metadata database146, content directory144, content storage142, account database140, etc. as appropriate.

When synchronizing from content management system110to client device150, a modification, addition, deletion, move of a content item recorded in server file journal148can trigger a notification to be sent to client device150using notification service117. When client device150is informed of the change to server file journal148, client device can check storage index164to determine if the time stamp of the change occurred since the last synchronization, or determine if the specific change has been synchronized. When client device150determines that it is out of synchronization with content management system110, content item synchronization service154requests content item blocks including the changes, and updates its local copy of the changed content items. In some embodiments, notification service can query other services or databases of content management system110such as server file journal148to gain more context for the notification, to determine if a notification can be batched with another notification or to supplement a notification.

Sometimes client device150might not have a network connection available. In this scenario, content item synchronization service154can monitor the linked collection for content item changes and queue those changes for later synchronization to content management system110when a network connection is available. Similarly, a user can manually start, stop, pause, or resume synchronization with content management system110.

Content item synchronization service154can synchronize content associated with a particular user account on content management system110. Alternatively, content item synchronization service154can selectively synchronize a portion of the content of the total content associated with the particular user account on content management system110. Selectively synchronizing only a portion of the content can preserve space on client device150and save bandwidth.

In some embodiments, content item synchronization service154selectively stores a portion of the content associated with the particular user account and stores placeholder content items in client storage for the remainder portion of the content. For example, content item synchronization service154can store a placeholder content item that has the same filename, path, extension, metadata, of its respective complete content item on content management system110, but lacking the data of the complete content item. The placeholder content item can be a few kilobytes or less in size while the respective complete content item might be significantly larger. After client device150attempts to access the content item, content item synchronization service154can retrieve the data of the content item from content management system110and provide the complete content item to accessing client device150. This approach can provide significant space and bandwidth savings while still providing full access to a user's content on content management system110.

Collaboration Features

Another feature of content management system110is to facilitate collaboration between users. Collaboration features include content item sharing, commenting on content items, co-working on content items, instant messaging, providing presence and seen state information regarding content items, etc.

Sharing

Content management system110can manage sharing content via sharing service128. Sharing content by providing a link to the content can include making the content item accessible from any computing device in network communication with content management system110. However, in some embodiments a link can be associated with access restrictions enforced by content management system110. Sharing content can also include linking content using sharing service128to share content within content management system110with at least one additional user account (in addition to the original user account associated with the content item) so that each user account has access to the content item. The additional user account can gain access to the content by accepting the content, which will then be accessible through either web interface service124or directly from within the directory structure associated with their account on client device150. The sharing can be performed in a platform agnostic manner. That is, the content can be shared across multiple client devices150of varying type, capabilities, operating systems, etc. The content can also be shared across varying types of user accounts.

To share a content item within content management system110sharing service128can add a user account identifier to a content entry in access control list database145associated with the content item, thus granting the added user account access to the content item. Sharing service128can also remove user account identifiers from a content entry to restrict a user account's access to the content item. Sharing service128can record content item identifiers, user account identifiers given access to a content item, and access levels in access control list database145.

To share content items outside of content management system110, sharing service128can generate a custom network address, such as a uniform resource locator (URL), which allows any web browser to access the content item or collection in content management system110without any authentication. To accomplish this, sharing service128can include content identification data in the generated URL, which can later be used to properly identify and return the requested content item. For example, sharing service128can include the account identifier and the content path or a content item identifying code in the generated URL. Upon selection of the URL, the content identification data included in the URL can be transmitted to content management system110, which can use the received content identification data to identify the appropriate content item and return the content item.

In addition to generating the URL, sharing service128can also be configured to record in access control list database145that a URL to the content item has been created. In some embodiments, the content entry associated with a content item can include a URL flag indicating whether a URL to the content item has been created. For example, the URL flag can be a Boolean value initially set to 0 or false to indicate that a URL to the content item has not been created. Sharing service128can change the value of the flag to 1 or true after generating a URL to the content item.

In some embodiments, sharing service128can associate a set of permissions to a URL for a content item. For example, if a user attempts to access the content item via the URL, sharing service128can provide a limited set of permissions for the content item. Examples of limited permissions include restrictions that the user cannot download the content item, save the content item, copy the content item, modify the content item, etc. In some embodiments, limited permissions include restrictions that only permit a content item to be accessed from a specified domain, i.e., from within a corporate network domain.

In some embodiments, sharing service128can also be configured to deactivate a generated URL. For example, each content entry can also include a URL active flag indicating whether the content should be returned in response to a request from the generated URL. For example, sharing service128can only return a content item requested by a generated link if the URL active flag is set to 1 or true. Thus, access to a content item for which a URL has been generated can be easily restricted by changing the value of the URL active flag. This allows a user to restrict access to the shared content item without having to move the content item or delete the generated URL. Likewise, sharing service128can reactivate the URL by again changing the value of the URL active flag to 1 or true. A user can thus easily restore access to the content item without the need to generate a new URL.

In some embodiments, content management system110can designate a URL for uploading a content item. For example, a first user with a user account can request such a URL, provide the URL to a contributing user and the contributing user can upload a content item to the first user's user account using the URL.

Events

Content management system110can track, create, and store events involving content items and/or user activity. For example, when a user interacts with a content item (e.g., add, edit, post, share, delete, comment, move, rename, etc.) and/or interacts with another user (e.g., message, comment, collaborate, etc.), event service118can generate an event for such interaction. When event service118detects a user interaction with a content item and/or another user, event service118can create an event identifier (e.g., unique event identifier) and event type, and associate the event identifier and event type with the user (e.g., user identifier and namespace identifier) to create an event or event record for the interaction. After the event is created, event service118can send the event identifier and any information associated with the event to events143for storage.

Events143can include one or more storage systems, such as one or more databases, for storing events and associated information. In some examples, events143can include a distributed database or distributed storage system. Events143can receive and store the event data for access by content management system110.

Presence and Seen State

Content management system110can provide information about how users are interacting or have interacted with a content item, such as a shared content item. Content management system110can report that a user with whom a content item is shared is currently viewing the content item. For example, client collaboration service160can notify notifications service120when client device150is accessing the content item. Notify notifications service120can notify client devices of other users having access to the same content item of the presence of the user of client device150with respect to the content item. Content management system110(e.g., event service118) and/or client device150can track user interactions with content, such as read or write events, and maintain a history of such events and interactions for a user (e.g., events143).

Content management system110can report a history of user interactions with a shared content item. Collaboration content management service126can query data sources such as events143, metadata database146, and server file journal148to determine that a user has saved the content item, that a user has yet to view the content item, etc., and disseminate this status information using notification service117to other users so that they can know who currently is or has viewed or modified the content item.

Collaboration content management service126can facilitate comments associated with content, even if a content item does not natively support commenting functionality. Such comments can be stored in metadata database146.

Collaboration content management service126can originate and transmit notifications for users. For example, a user can mention another user in a comment and Collaboration content management service126can send a notification to that user that he has been mentioned in the comment. Various other content item events can trigger notifications, including deleting a content item, sharing a content item, etc.

Collaboration content management service126can provide a messaging platform whereby users can send and receive instant messages, voice calls, emails, etc.

Collaboration Content Items

Collaboration content management service126can also provide an interactive content item collaboration platform whereby users can simultaneously create collaboration content items, comment in the collaboration content items, and manage tasks within the collaboration content items. Collaboration content items can be files that users can create and edit using a collaboration content item editor, and can contain collaboration content item elements. Collaboration content item elements may include a collaboration content item identifier, one or more author identifiers, collaboration content item text, collaboration content item attributes, interaction information, comments, sharing users, etc. Collaboration content item elements can be stored as database entities, which allows for searching and retrieving the collaboration content items. Multiple users may access, view, edit, and collaborate on collaboration content items at the same time or at different times. In some embodiments this can be managed by requiring two users access a content item through a web interface and there they can work on the same copy of the content item at the same time.

Collaboration Companion Interface

In some embodiments client collaboration service160can provide a native application companion interface for the purpose of displaying information relevant to a content item being presented on client device150. In embodiments wherein a content item is accessed by a native application stored and executed on client device150, where the content item is in a designated location of the file system of client device150such that the content item is managed by content application152, the native application may not provide any native way to display the above addressed collaboration data. In such embodiments, client collaboration service160can detect that a user has opened a content item, and can provide an overlay with additional information for the content item, such as collaboration data. For example, the additional information can include comments for the content item, status of the content item, activity of other users previously or currently viewing the content item. Such an overlay can warn a user that changes might be lost because another user is currently editing the content item.

In some embodiments, one or more of the services or storages/databases discussed above can be accessed using public or private application programming interfaces.

Certain software applications can access content storage142via an API on behalf of a user. For example, a software package such as an application running on client device150, can programmatically make API calls directly to content management system110when a user provides authentication credentials, to read, write, create, delete, share, or otherwise manipulate content.

A user can view or manipulate content stored in a user account via a web interface generated and served by web interface service124. For example, the user can navigate in a web browser to a web address provided by content management system110. Changes or updates to content in the content storage160made through the web interface, such as uploading a new version of a content item, can be propagated back to other client devices associated with the user's account. For example, multiple client devices, each with their own client software, can be associated with a single account and content items in the account can be synchronized between each of the multiple client devices.

Client device150can connect to content management system110on behalf of a user. A user can directly interact with client device150, for example when client device150is a desktop or laptop computer, phone, television, internet-of-things device, etc. Alternatively or additionally, client device150can act on behalf of the user without the user having physical access to client device150, for example when client device150is a server.

Some features of client device150are enabled by an application installed on client device150. In some embodiments, the application can include a content management system specific component. For example, the content management system specific component can be a stand-alone application152, one or more application plug-ins, and/or a browser extension. However, the user can also interact with content management system110via a third-party application, such as a web browser, that resides on client device150and is configured to communicate with content management system110. In various implementations, the client-side application152can present a user interface (UI) for a user to interact with content management system110. For example, the user can interact with the content management system110via file system extension153integrated with the file system or via a webpage displayed using a web browser application.

In some embodiments, client application152can be configured to manage and synchronize content for more than one account of content management system110. In such embodiments client application152can remain logged into multiple accounts and provide normal services for the multiple accounts. In some embodiments, each account can appear as folder in a file system, and content items within that folder can be synchronized with content management system110. In some embodiments, client application152can include a selector to choose one of the multiple accounts to be the primary account or default account.

While content management system110is presented with specific components, it should be understood by one skilled in the art, that the architectural configuration of system100is simply one possible configuration and that other configurations with more or fewer components are possible. Further, a service can have more or less functionality, even including functionality described as being with another service. In addition, in some embodiments, some portions or components of content management system110described herein may be included in or integrated with one or more client devices150. Moreover, features described herein with respect to an embodiment can be combined with features described with respect to another embodiment.

While system100is presented with specific components, it should be understood by one skilled in the art, that the architectural configuration of system100is simply one possible configuration and that other configurations with more or fewer components are possible.

FIG.2is a block diagram of an example system200, according to example embodiments. For example, system200may correspond to system100described above. As illustrated, system200may include client device202, client device252and content management system230communicating via network205(similar to network105).

A user of client device202(e.g., client device150) may create an account with content management system110. Client device202may include a graphical user interface (GUI)204, a file system206, and a content management system (CMS) client210. User of client device202may view one or more content items (e.g., files, links, folders, workspaces, etc.) associated with the user's account via GUI204. For example, GUI204may provide user of client device202with access to content items associated with the user's account. In some embodiments, GUI204may provide a file structure overview. Via GUI204, user of client device202may view, edit, modify, and otherwise interact with content items.

In some implementations, client device202may include file system206. For example, file system206may be representative of a portion (e.g., a dedicated folder) of the file system of client device202that includes content items being managed by content management system110. In some embodiments, content items stored in file system206may be automatically uploaded to or synchronized with file systems in content management system110and/or managed file systems on other user devices (e.g., client device252). As illustrated, in some embodiments, file system206may include shared folder208. Shared folder208may be accessed by a user of client device202, as well as collaborators of the user.

In some implementations, client device202may further include CMS client210. For example, CMS client240(referenced to as content item synchronization service154) may manage file system206. When a user adds a content item to file system206, CMS client210may communicate with content management system230to synchronize the content item with content management system230, as described with reference toFIG.1above. Similarly, CMS client210may monitor items in file system206to determine when content items may have been opened, modified, moved, shared, deleted, etc., and which user has performed or is performing operations on the content items within file system206.

In some implementations, user of client device202may share access to a content item with a user of client device252. In some embodiments, client device252may belong to the same user as client device202. For example, client device252may be a user's mobile device, while client device202may be the user's desktop or laptop device. In some embodiments, client device252may belong to a different user. Client device252may be configured similar to client device202. Client device252may include GUI254, file system256, and CMS client260.

User of client device252may view one or more files, links, folders, workspaces, etc., associated with the user's account via GUI254. Via GUI254, user of client device252may view, edit, modify, and otherwise interact with the content items.

In some implementations, client device252may include file system256. For example, file system256may be representative of a portion of the file system of client device252managed by content management system110. In some embodiments, content items stored in file system256may be automatically uploaded to or synchronized with file systems in content management system110and/or managed file systems on other user devices (e.g., user device202). As illustrated, in some embodiments, file system256may include shared folder258. Shared folder258may be accessed by a user of client device252, as well as collaborators of the user.

In some implementations, client device252may further include CMS client260. For example, CMS client260(referenced to as content item synchronization service154) may manage file system256. When a user adds a content item to file system256, CMS client260may communicate with content management system230to synchronize the content item with content management system230, as described with reference toFIG.1above. Similarly, CMS client260may monitor items in file system206to determine content items may have been opened, modified, moved, shared, deleted, etc., and which user has or is performing operations on the content items within file system206.

Content management system230may include CMS service232, searching service234, content item processor236, and storage location240. CMS service232may be representative of one or more modules discussed above in reference toFIG.1. For example, CMS service232may track a user's interaction with content items associated with the user's account. In some embodiments, the interactions may include, but are not limited to, editing, adding, posting, sharing, deleting, commenting, moving, renaming, and otherwise interacting with or manipulating the content items. Using a specific example, CMS service232may track when a user adds a content item to a folder, edits a content item, shares a content item (e.g., a folder or a file) with another user, deletes a content item (e.g., a file or folder), shares a link to a content item, and the like. In some embodiments, CMS service232may generate an event for each such interaction. For example, when CMS service232detects a user interaction with content associated with the user's account, CMS service232may create a unique event identifier and event type, and associate the event identifier and event type with the user to create an event or event record for the interaction. In some embodiments, CMS service may associate event identifier and event type with a user identifier and/or namespace identifier associated with the user. CMS service232may store each event or event record in storage location240.

Although CMS service232, searching service234, and content item processor236are discussed as components of content management system230, those skilled in the art recognize that CMS service232, searching service234, and/or content item processor236may also be a component of client device252. In other words, the operations discussed with respect to CMS service232, searching service234, and content item processor236may be performed remotely at content management system230and/or locally at client device252.

Searching service234may be configured to handle search queries from client device202or client device252. Via an actionable element on GUI204or GUI254, a user associated with client device202or client device252, respectively, may request searching service234to execute a query against the user's namespace. Searching service234may execute the query against the user's namespace, by searching storage location240to identify potential search results based on the query and the user's namespace. In other words, searching service234may execute the query to determine which content items associated with the user are relevant to the query.

In some embodiments, searching service234may not be able to return results to the user because of an error associated with the query. For example, if a user misspells a term in the search request, searching service234may query storage location240based on the misspelled term, which may not return any results (i.e., due to the misspelled term). To reduce the number of search requests that a user may submit and to increase the quality of search results, searching service234may utilized a personalized vocabulary242for searching against a user's namespace.

Personalized vocabulary242may be generated by content item processor236and stored in storage location240. Personalized vocabulary242may be used to verify and/or correct search terms in a user's search request.

Content item processor236may be configured to generate and maintain personalized vocabulary242. Content item processor236may generate personalized vocabulary242for each user based on content items associated with a user's namespace. To generate personalized vocabulary242, content item processor236may parse some, all, or substantially all content item associated with a user's namespace and index some, all, or substantially all terms and/or phrases contained in the content items. For example, content item processor236may parse all or substantially all content items of certain file types, such as all or substantially all content items that contain readable text (either in plain text form or in a format that can be decoded by content item processor236). Put differently, in some embodiments content item processor236may parse all or substantially all content items, except files of certain types or formats, such as content items that do not contain readable text or are not parseable (e.g., whose format is not supported by content item processor236).

Content item processor236may index some, all or substantially all words and/or phrases identified in the parsed user's content items based on a frequency of occurrence.

In some embodiments, indexing some, all or substantially all word and/or phrase identified in the parsed user's content items may include storing information associated with some, all or substantially all word and/or phrase. For example, in some embodiments, parsing some, all, or substantially all content items associated with the user's namespace may include maintaining a location of each term and/or phrase identified in the parsed content item within the namespace. In some embodiments, content item processor236may maintain a path location of some, all or substantially all words and/or phrases associated with the user's namespace. For example, content item processor236may determine that the term “snippet” appears 30 times across the user's namespace; 20 times within Folder A of Workspace 1 and 10 times within Folder B of Workspace 2. By maintaining the path location of some, all or substantially all word and/or phrase associated with the user's namespace, content item processor236may maintain a ranking of terms and/or phrases globally (i.e., across the user's namespace) as well as locally (e.g., within a workspace or folder).

In another example, in some embodiments, parsing some, all or substantially all content items associated with the user's namespace may include determining a date associated with some, all or substantially all word and/or phrase identified in the parsed content items. Maintaining the date associated with some, all or substantially all words and/or phrases may aid in determining those words and/or phrases that are most pertinent to the user based on recency of use.

In some embodiments, parsing some, all, or substantially all content items associated with the user's namespace may include parsing some, all, or substantially all content items in namespaces linked to the user's namespace. CMS service232may support the linking of namespaces. In some embodiments, a user may link a first account (e.g., a first namespace) to a second account (e.g., a second namespace). In an exemplary case, a user may link their personal account (e.g., a personal namespace) with their business/work account (e.g., a business/work namespace). Accordingly, in some embodiments, content item processor236may be configured to process content items associated with other namespaces linked to the user's namespace.

In some embodiments, parsing some, all, or substantially all content items associated with the user's namespace may include determining a device from which the user uploaded and/or modified a content item. For example, indexing some, all or substantially all word and/or phrase identified in the parsed user's content items may include storing information the device type (e.g., tablet, laptop, mobile device, desktop, etc.) associated with some, all or substantially all words and/or phrases.

Content item processor236may further be provided to maintain personalized vocabulary242based on events or event records associated with the user's name space. For example, when CMS service232detects a user interaction with content associated with the user's account, CMS service232may create a unique event identifier and event type, and associate the event identifier and event type with the user to create an event or event record for the interaction. In some embodiments, CMS service may associate event identifier and event type with a user identifier and/or namespace identifier associated with the user. CMS service232may store each event or event record in storage location240. Upon determining that an event or event record has been added to storage location240, content item processor236may parse the associated content item to determine whether words and/or terms were added and/or removed from a content item. In some embodiments, upon determining that words and/or terms were added to a content item, content item processor236may index those words and/or terms in personalized vocabulary242. In some embodiments, upon determining that words and/or terms were removed from a content item, content item processor236may re-index personalized vocabulary242. For example, upon determining that there are now fewer recitations of a term recited in user's content items, content item processor236may update the frequency count for that term. In some embodiments, content item processor236may not re-index personalized vocabulary based on removed terms and/or phrases. By continually updating personalized vocabulary242, content item processor236may maintain an up-to-date index of the user's words and/or phrases.

As shown, personalized vocabulary242may be stored in storage location240. Personalized vocabulary242may be representative of a data structure comprising an index of terms and/or phrases used in content items associated with the user's namespace. In some embodiments, personalized vocabulary242may be sorted by the frequency of terms and/or phrases. In some embodiments, personalized vocabulary242may include a sub-personalized vocabulary for each folder, workspace, and/or content item associated with the namespace. In this manner, searching service234may leverage personalized vocabulary242globally across a user's namespace and locally within a folder, workspace, and/or content item.

In operation, searching service234may use personalized vocabulary242to verify the user's search request. Upon receiving a search request from client device202or client device252, searching service234may verify the user's search request against personalized vocabulary242before querying storage location240for results. Verifying the user's search request may reduce the time it takes the user to search their namespace by correcting potential typos or misspellings in the search request and providing suggested search terms to the user.

FIG.3Ais a block diagram300illustrating an exemplary process for maintaining a personalized vocabulary, according to example embodiments. As shown, CMS service232may detect a user interacting (illustrated as301) with content item302. In some embodiments, a user interacting301with content item302may include the user (e.g., client device202) uploading content item302to content management system230. In some embodiments, client device202interacting301with content item302may include client device202creating a new content item. In some embodiments, client device202interacting301with content item302may include client device202deleting a content item302from content management system230. In some embodiments, client device202interacting301with content item302may include client device202modifying or editing content item302. In some embodiments, client device202interacting301with content item302may include client device202moving content item302within the underlying folder structure of the user's namespace (e.g., from folder1to folder2). In some embodiments, CMS service232may detecting an interaction301with content item302when a collaborator (e.g., client device252) with the user (e.g., client device202) modifies content item302, which is shared with both a user of client device202and a user of client device252. CMS client232may create an event or event record associated with interaction301. CMS client232may store the event or event record in storage location240associated with the user's namespace.

In some embodiments, content item processor236may monitor storage location240for new events or event records created by CMS service232. In some embodiments, CMS service232may activate content item processor236upon creating an event or event record. In some embodiments, content item processor236may be configured to parse storage location240periodically, to identify new event or event records created by CMS service232. Upon determining that a new event or event record exists, content item processor236may analyze the interaction that triggered CMS service232to create an event or event record. For example, if the interaction that triggered the event or event record is client device202uploading content item302to content management system230, content item processor236may parse content item302to index some, all or substantially all terms and/or phrases contained therein. In another example, if the interaction that triggered the event or event record is client device202modifying content item302in content management system230, content item processor236may parse event and/or event record to identify any changes in content item302. Content item processor236may update personalized vocabulary242associated with client device202accordingly.

FIG.3Bis a block diagram350illustrating an exemplary process for processing a search request, according to example embodiments. Client device202may submit search request304to searching service234. As illustrated, searching service234may include a processor306and ranking model308. Processor306may be configured to process search requests received from client device202.

Single Term Search Request

In some embodiments, search request304may be representative of a single term search request. To process search request304, processor306may query storage location240to determine if the term in search request304occurs at least a threshold number of times in personalized vocabulary242. In some embodiments, a threshold number of times may include at least one time. Determining whether the term in search request304occurs at least the threshold number of times provides a sense of confidence that the term is not a typo or misspelling. If processor306determines that the term occurs at least the threshold number of times in personalized vocabulary242, then searching service234may query storage location240using the search term. If, however, processor306determines that the term does not occur at least the threshold number of times, processor306may generate a corrected search suggestion310for the user. To generate the corrected search suggestion310, processor306may generate a plurality of search term options for what the user may have meant to use, based on personalized vocabulary242.

In some embodiments, processor306may identify a prefix of the search term. Using a specific example, assume the search term submitted by client device202was “basetball.” In some embodiments, processor306may determine that the prefix of the search team is “b.” Using the prefix, processor306may identify a plurality of terms in personalized vocabulary242that include the same prefix. In other words, continuing with the above example, processor306may identify a plurality of terms in personalized vocabulary242that begin with the letter “b.” Processor306may generate a data set corresponding to the plurality of search term options. For example, an exemplary data set may include [basketball, basketballs, baseball, baseballs, basket, base, . . . , etc.]. The data set may include a plurality of terms in personalized vocabulary242that has the same prefix.

After the data set is generated, processor306may utilize ranking model308to determine at least one corrected search suggestion310to provide to the user. Ranking model308may be representative of a model that ranks each of the search term options based on a variety of variables. In some embodiments, ranking model308may rank each of the search term options based on their frequency of occurrence in personalized vocabulary242. In some embodiments, ranking model308may rank each of the search term options based on their edit distances from the search term. In some embodiments, ranking model308may rank each of the search term options based on a data associated with their generation. For example, ranking model308may rank option A ahead of option B because of the recency of occurrences of option A compared to option B in personalized vocabulary242. In some embodiments, ranking model308may rank each of the search term options based on their location within the user's namespace. For example, a user constrained the search request to content items in Folder1, ranking model308may rank occurrences of a term in Folder1more heavily than occurrences of a term not in Folder1.

Based on the ranking, searching service234may present a corrected search suggestion310to the user. In some embodiments, searching service234may present a single corrected search suggestion310. In some embodiments, searching service234may present at least two corrected search suggestions310. In some embodiments, searching service234may generate an actionable link for each corrected search suggestion310. For example, a user may click on the corrected search suggestion310, which would trigger a search request of that corrected search suggestion310from client device202to searching service234.

Multi-term Search Request

In some embodiments, search request304may be representative of a multi-term search request. In other words, search request304may include at least two terms. To process search request304, processor306may query storage location240to determine if each term in search request304occurs at least a threshold number of times in personalized vocabulary242. In some embodiments, a threshold number of times may include at least one time. Determining whether each term in search request304occurs at least the threshold number of times provides a sense of confidence that each term is not a typo or misspelling. If processor306determines that each term occurs at least the threshold number of times in personalized vocabulary242, then searching service234may query storage location240using the search term. If, however, processor306determines that at least one term does not occur at least the threshold number of times, processor306may generate a corrected search suggestion310for the user for the term that does not occur the threshold number of times. To generate the corrected search suggestion310, processor306may generate a plurality of search term options for what the user may have meant to use, based on personalized vocabulary242.

In some embodiments, processor306may identify a prefix of the search term. Using a specific example, assume the search term submitted by client device202was “basetball game.” As those skilled in the art recognize, “game” is spelled correctly. For purposes of the example, assume that “game” occurs at least the threshold number of times. Accordingly, processor306may determine that the prefix of the search team “basetball” is “b.” Processor306does not need to perform similar operations on “game” because “game” is assumed to have occurred at least the threshold number of times. Using the prefix, processor306may identify a plurality of terms in personalized vocabulary242that include the same prefix. In other words, continuing with the above example, processor306may identify a plurality of terms in personalized vocabulary242that begin with the letter “b.” Processor306may generate a data set corresponding to the plurality of search term options. For example, an exemplary data set may include [basketball, basketballs, baseball, baseballs, basket, base, . . . , etc.]. The data set may include a plurality of terms in personalized vocabulary242that has the same prefix.

After the data set is generated, processor306may utilize ranking model308to determine at least one corrected search suggestion310to provide to the user. Ranking model308may be representative of a model that ranks each of the search term options based on a variety of variables. In some embodiments, ranking model308may rank each of the search term options based on their frequency of occurrence in personalized vocabulary242. In some embodiments, ranking model308may rank each of the search term options based on their edit distances from the search term. In some embodiments, ranking model308may rank each of the search term options based on a data associated with their generation. In some embodiments, ranking model308may rank each of the search term options based on their location within the user's namespace.

Based on the ranking, processor306may then add the search terms together and search personalized vocabulary for each phrase. For example, processor306may generate an exemplary data set that may include: [basketball game, basketballs game, baseball game, baseballs game, basket game, base game, game basketball, game basketballs, game baseball, game baseballs, game basketball, game, base, etc.]. Processor306may compare each phrase in the exemplary data set to personalized vocabulary242to determine a number of occurrences of each phrase. Continuing with the above example, processor306may determine that “basketball game” occurs 40 times in personalized vocabulary242and “baseball game” occurs 20 times in personalized vocabulary242. Accordingly, searching service234may present at least “basketball game” to the user as a

corrected search suggestion310.FIG.4Aillustrates an example view of a graphical user interface400presenting a user's homepage with content management system110, according to example embodiments. Graphical user interface400(hereinafter “GUI400”) may correspond to GUI204and/or GUI254ofFIG.2. In some embodiments, GUI400may be a web page presented in a web browser application of client device150. In some embodiments, GUI400may be a graphical user interface generated by a native software application executing on client device150.

As illustrated, GUI400may correspond to a homepage associated with a user's account. GUI400may include a first portion402and a second portion404. First portion402of GUI400may correspond to a navigation pane of GUI400. First portion402may include one or more graphical elements406-410(e.g., button, link, etc.) selectable by the user to cause GUI400(e.g., the browser or native application) to send a message to content management service requesting information associated with each graphical element406-410.

Graphical element406may correspond to the user's account. Accordingly, upon receiving input via graphical element406, GUI400may request, from content management system116, all content associated with the user's account. Content management service116may deliver the content to GUI400so that GUI400may display the content on the display associated with client device150.

Graphical element408may correspond to starred content. Starred content may correspond to content that the user has designated as “favorite.” Accordingly, upon receiving input via graphical element408, GUI400may request, from content management system116, starred content associated with the user's account. Content management service116may deliver the content to GUI400so that GUI400may display the content on the display associated with client device150.

Graphical element410may correspond to a folder. A folder may correspond to a storage space in the user's account. In some embodiments, the folder may include content associated therewith. According, upon receiving input via graphical element410, GUI400may request, from content management system116, all content associated with (or stored in) the selected folder. Content management service116may deliver the folder's content to GUI400so that GUI400may display the content on the display associated with client device150

Second portion404may correspond to a display section of GUI400. For example, upon the user interacting with graphical element406, graphical element408, or graphical element410, GUI400may display content associated with the selection in second portion404. Second portion404may include one or more content items412. As illustrated, user of client device150may have interacted with graphical element406corresponding to the user's account. Accordingly, second portion404may include one or more content items412associated with the user's account.

In some embodiments, second portion404may include at least graphical element414. Graphical element414may correspond to search bar. Via graphical element414, a user can submit search requests to content management system110.

FIG.4Billustrates an example view of a graphical user interface450presenting a search results page, according to example embodiments. Graphical user interface450(hereinafter “GUI450”) may correspond to GUI204and/or GUI254ofFIG.2. In some embodiments, GUI450may be a web page presented in a web browser application of client device150. In some embodiments, GUI450may be a graphical user interface generated by a native software application executing on client device150.

As illustrated, GUI450may include second portion454corresponding to a search results view, when a user submits a search request via graphical element414of GUI400. Graphical element414may include the search term or phrase entered by the user. For example, as illustrated, a user may have submitted a search request for “Basetball game.” Based on the operations discussed above in conjunction withFIG.3A, searching service234may have generated a set of corrected search suggestions to the user.

As illustrated, GUI450may further include graphical element456and graphical element458. Graphical element456may be representative of a result count for the query. For example, graphical element456may recite “0results” when searching service234returns a corrected search suggestion. Graphical element458may be representative of a results area. In those embodiments in which a corrected search suggestion is generated, searching service234may present the user with corrected search suggestions via graphical element458. In some embodiments, the corrected search suggestions may be listed by their ranking. In some embodiments, each corrected search suggestion may be presented as an actionable element. For example, upon user interaction with a graphical element corresponding to “basketball game,” client device150may transmit a search request of “basketball game” to content management system110.

FIG.4Cillustrates an example view of a graphical user interface470presenting a second user's homepage with content management system110, according to example embodiments. Graphical user interface470(hereinafter “GUI470”) may correspond to GUI204and/or GUI254ofFIG.2. In some embodiments, GUI470may be a web page presented in a web browser application of client device150. In some embodiments, GUI470may be a graphical user interface generated by a native software application executing on client device150.

As illustrated, GUI470may correspond to a homepage associated with a second user's account. GUI470may include a first portion472and a second portion474. First portion472of GUI470may correspond to a navigation pane of GUI470. First portion472may include one or more graphical elements476-480(e.g., button, link, etc.) selectable by the second user to cause GUI470(e.g., the browser or native application) to send a message to content management service requesting information associated with each graphical element476-480.

Graphical element476may correspond to the second user's account. Accordingly, upon receiving input via graphical element476, GUI470may request, from content management system116, all content associated with the second user's account. Content management service116may deliver the content to GUI470so that GUI470may display the content on the display associated with client device150.

Graphical element478may correspond to starred content. Starred content may correspond to content that the second user has designated as “favorite.” Accordingly, upon receiving input via graphical element478, GUI470may request, from content management system116, starred content associated with the second user's account. Content management service116may deliver the content to GUI470so that GUI470may display the content on the display associated with client device150.

Graphical element480may correspond to a folder. A folder may correspond to a storage space in the second user's account. In some embodiments, the folder may include content associated therewith. According, upon receiving input via graphical element480, GUI470may request, from content management system116, all content associated with (or stored in) the selected folder. Content management service116may deliver the folder's content to GUI470so that GUI470may display the content on the display associated with client device150

Second portion474may correspond to a display section of GUI470. For example, upon the second user interacting with graphical element476, graphical element478, or graphical element480, GUI470may display content associated with the selection in second portion404. Second portion474may include one or more content items482. As illustrated, second user of client device150may have interacted with graphical element476corresponding to the second user's account. Accordingly, second portion474may include one or more content items482associated with the second user's account.

In some embodiments, second portion474may include at least graphical element484. Graphical element484may correspond to search bar. Via graphical element484, a second user can submit search requests to content management system110.

FIG.4Dillustrates an example view of a graphical user interface490presenting a search results page, according to example embodiments. Graphical user interface490(hereinafter “GUI490”) may correspond to GUI204and/or GUI254ofFIG.2. In some embodiments, GUI490may be a web page presented in a web browser application of client device150. In some embodiments, GUI490may be a graphical user interface generated by a native software application executing on client device150.

As illustrated, GUI490may include second portion494corresponding to a search results view, when a second user submits a search request via graphical element484of GUI470. Graphical element484may include the search term or phrase entered by the second user. For example, as illustrated, a second user may have submitted a search request for “Basetball game.” Based on the operations discussed above in conjunction withFIG.3A, searching service234may have generated a set of corrected search suggestions to the second user.

As illustrated, GUI470may further include graphical element496and graphical element498. Graphical element496may be representative of a result count for the query. For example, graphical element496may recite “0 results” when searching service234returns a corrected search suggestion. Graphical element498may be representative of a results area. In those embodiments in which a corrected search suggestion is generated, searching service234may present the second user with corrected search suggestions via graphical element498. In some embodiments, the corrected search suggestions may be listed by their ranking. In some embodiments, each corrected search suggestion may be presented as an actionable element.

As illustrated, the corrected search suggestions in graphical element498include different corrected search suggestions from graphical element458. This may be attributed to the search request originating from the second user instead of the first user associated withFIGS.4A-4B. As recited above, content item processor236may generate personalized vocabulary242for each user based on content items associated with each user's name space. In other words, the personalized vocabulary for a first user (e.g., user fromFIGS.4A-4B) may be different from the personalized vocabulary generated for a second user (e.g., user fromFIGS.4C-4D). Therefore, the same search query may not trigger the same set of corrected search suggestions for two different users.

As illustrated in graphical element458, the second user may be provided with the corrected search suggestions: “baskeball game” or “baskeball games.” Although the term “baskeball” may also be spelled incorrectly, the term “baskeball” may occur at least a threshold number of times in the second user's personalized vocabulary. As such, searching service234may return “baskeball game” or “baskeball games” to the second user as a corrected search suggestion, based on the second user's personalized dictionary.

FIG.5Aillustrates an example view of a graphical user interface500presenting a folder view, according to example embodiments. Graphical user interface500(hereinafter “GUI500”) may correspond to GUI204and/or GUI254ofFIG.2. In some embodiments, GUI500may be a web page presented in a web browser application of client device150. In some embodiments, GUI500may be a graphical user interface generated by a native software application executing on client device150.

As illustrated, GUI500may correspond to a view of Folder1of the user's account. As illustrated, GUI500may include portion504. Portion504may correspond to Folder1of the user's account. Portion504may include one or more content items512associated with the Folder1. In some embodiments, portion504may include at least graphical element514. Graphical element514may correspond to search bar. Via graphical element514, a user can submit search requests to content management system110. In some embodiments, submitting a search request via graphical element514, as opposed to graphical element414, may constrain search query to Folder1. In some embodiments, constraining the query to a specific folder or workspace may also influence the corrected search suggestions presented to the user.

FIG.5Billustrates an example view of a graphical user interface550presenting a search results page, according to example embodiments. Graphical user interface550(hereinafter “GUI550”) may correspond to GUI204and/or GUI254ofFIG.2. In some embodiments, GUI550may be a web page presented in a web browser application of client device150. In some embodiments, GUI550may be a graphical user interface generated by a native software application executing on client device150.

As illustrated, GUI550may include portion554corresponding to a search results view, when a user submits a search request via graphical element514of GUI500. Graphical element514may include the search term or phrase entered by the user. For example, as illustrated, a user may have submitted a search request for “Basetball game.” Based on the operations discussed above in conjunction withFIG.3A, searching service234may have generated a set of corrected search suggestions to the user.

As illustrated, GUI550may further include graphical element556and graphical element558. Graphical element556may be representative of a result count for the query. For example, graphical element556may recite “0 results” when searching service234returns a corrected search suggestion. Graphical element458may be representative of a results area. In those embodiments in which a corrected search suggestion is generated, searching service234may present the user with corrected search suggestions via graphical element558. In some embodiments, the corrected search suggestions may be listed by their ranking. In some embodiments, each corrected search suggestion may be presented as an actionable element.

As illustrated, the corrected search suggestions in graphical element558are listed in a different order from graphical element458. This may be attributed to the search request occurring within the Folder1page compared to the user's homepage. Continuing with the above example, searching service234may have determined that “basketball game” is recited 40 times in personalized vocabulary242and “baseball game” is recited 20 times in personalized vocabulary242. Because the search request illustrated inFIG.5Bmay be constrained to Folder1, searching service234may have determined, for example, that “baseball game” is recited 20 times in Folder1and “basketball game” is recited 5 times in Folder1. Accordingly, the relevancy of “baseball game” is higher in Folder1than generally across content items associated with the user's namespace. Therefore, the corrected search suggestions provided to the user via GUI550may be different from the corrected search suggestions provided to the user via GUI450.

FIG.6is a flow diagram illustrating a method600of generating and maintaining personalized vocabulary242, according to example embodiments. Method600may begin as step602.

At step602, content item processor236may identify content items associated with a user's namespace. In some embodiments, identifying content items associated with a user's namespace may include identifying whether the user has other namespaces linked to their account. If the user has another namespace linked to their account, content item processor236may also identify content item's associated with the linked namespace.

At step604, content item processor236may parse some, all, or substantially all content items associated with a user's namespace. In some embodiments, parsing some, all, or substantially all content items associated with the user's namespace may include content item processor236parsing all content items within or associated with the user's namespace.

At step606, content item processor236may index some, all or substantially all words and/or phrases identified in the parsed user's content items based on a frequency of occurrence. In some embodiments, indexing some, all or substantially all word and/or phrase identified in the parsed user's content items may include storing information associated with some, all or substantially all words and/or phrases. For example, in some embodiments, parsing some, all, or substantially all content items associated with the user's namespace may include maintaining a location of some, all or substantially all terms and/or phrases identified in the content item within the namespace. In some embodiments, content item processor236may maintain a path location of some, all or substantially all words and/or phrases associated with the user's namespace. In another example, in some embodiments, parsing some, all or substantially all content items associated with the user's namespace may include determining a date associated with some, all or substantially all words and/or phrases identified in respective content items. In some embodiments, parsing some, all or substantially all content items associated with the user's namespace may include parsing some, all or substantially all content items in namespaces linked to the user's namespace. In some embodiments, parsing some, all or substantially all content items associated with the user's namespace may include determining a device from which the user uploaded and/or modified a respective content item.

At step608, content item processor236may receive an indication of a user interaction with a content item. In some embodiments, content item processor236may receive an indication by monitoring storage location240for new event or event records created by CMS service232. In some embodiments, content item processor236may receive an indication responsive to CMS service232activating content item processor236upon creating an event or event record. In some embodiments, content item processor236may be configured to parse storage location240periodically, to identify new event or event records created by CMS service232.

At step610, content item processor236may parse event and/or event record associated with the interaction. In some embodiments, upon determining that a new event or event record exists (i.e., an interaction with a content item), content item processor236may analyze the interaction that triggered creation of an event or event record. For example, if the interaction that triggered the event or event record is client device202uploading content item302to content management system230, content item processor236may parse content item302to index some, all or substantially all terms and/or phrases contained therein. In another example, if the interaction that triggered the event or event record is client device202modifying content item302in content management system230, content item processor236may parse event and/or event record to identify any changes in content item302.

At step612, content item processor236may update personalized vocabulary242associated accordingly. In some embodiments, upon determining that words and/or terms were added to a content item, content item processor236may index those words and/or terms in personalized vocabulary242. In some embodiments, upon determining that words and/or terms were removed from a content item, content item processor236may re-index personalized vocabulary242. For example, upon determining that there are now fewer recitations of a term recited in user's content items, content item processor236may update the frequency count for that term. In some embodiments, content item processor236may not re-index personalized vocabulary based on removed terms and/or phrases.

FIG.7is a flow diagram illustrating a method700of generating a corrected search suggestion, according to example embodiments. Method700may begin at step702.

At step702, content management system110may receive a search request from client device150. In some embodiments, content management system110may receive the search request from client device150via a search bar on a GUI presented to the user on client device150. In some embodiments, search request may include at least one term.

At step704, content management system110may compare the at least one search term to personalized vocabulary242. For example, to process search request304, processor306may query storage location240to determine if the term in search request304occurs at least a threshold number of times in personalized vocabulary242. Determining whether the term in search request304occurs at least the threshold number of times provides a sense of confidence that the term is not a typo or misspelling.

At step706, content management system110may determine whether the at least one term occurs at least a threshold number of times. If at step706, content management system110determines that the at least one term occurs at least the threshold number of times in personalized vocabulary242, then method700may proceed to step708. At step708, content management system110may process the search request. For example, searching service234may query storage location240using the search term.

If, however, at step706, content management system110determines that the at least one term does not occur at least the threshold number of times, content management system110may generate a corrected search suggestion for the user. To generate the corrected search suggestion, content management system110may generate a plurality of search term options for what the user may have meant to use, based on personalized vocabulary242, and present those search term options to the user.

At step710, content management system110may identify one or more search term options based on the at least one term. In some embodiments, content management system110may identify one or more search term options by identifying a prefix of the at least one term. Using a specific example, assume the search term submitted by client device202was “basetball.” In some embodiments, searching service234may determine that the prefix of the search team is “b.” Based on the prefix, content management system110may identify a plurality terms in personalized vocabulary242that include the same prefix. In other words, continuing with the above example, searching service234may identify a plurality of terms in personalized vocabulary242that begin with the letter “b.” In some embodiments, searching service234may generate a data set corresponding to the plurality of search term options. For example, an exemplary data set may include [basketball, basketballs, baseball, baseballs, basket, base, . . . , etc.]. The data set may include a plurality of terms in personalized vocabulary242that have the same prefix.

At step712, content management system110may rank each of the one or more search term options. After the data set is generated, searching service234may utilize ranking model308to determine at least one corrected search suggestion to provide to the user. Ranking model308may be representative of a model that ranks each of the search term options based on a variety of variables. In some embodiments, ranking model308may rank each of the search term options based on their frequency of occurrence in personalized vocabulary242. In some embodiments, ranking model308may rank each of the search term options based on their edit distances from the search term. In some embodiments, ranking model308may rank each of the search term options based on a data associated with their generation. In some embodiments, ranking model308may rank each of the search term options based on their location within the user's namespace.

At step714, content management system110may present at least one corrected search suggestions to the user based on the ranking. Based on the ranking, searching service234may present a corrected search suggestion to the user. In some embodiments, searching service234may present a single corrected search suggestion. In some embodiments, searching service234may present at least two corrected search suggestions. In some embodiments, searching service234may generate an actionable link for each corrected search suggestion. For example, a user may click on the corrected search suggestion, which would trigger a search request of that corrected search suggestion from client device202to searching service234.

FIG.8is a flow diagram illustrating a method800of generating a corrected search suggestion, according to example embodiments. Method800may begin at step802.

At step802, content management system110may receive a search request from client device150. In some embodiments, content management system110may receive the search request from client device150via a search bar on a GUI presented to the user on client device150. In some embodiments, search request may include at least two terms: a first term and a second term.

At step804, content management system110may compare each search term of the at least two search terms to personalized vocabulary242. For example, to process search request304, processor306may query storage location240to determine if each term in search request304occurs at least a threshold number of times in personalized vocabulary242. Determining whether each term in search request304occurs at least the threshold number of times provides a sense of confidence that each term is not a typo or misspelling.

At step806, content management system110may determine whether each term occurs at least a threshold number of times. If at step806, content management system110determines that the second term occurs at least the threshold number of times in personalized vocabulary242, then method800may proceed to step808. At step808, content management system110may hold the second term for further processing in steps816-820.

If, however, at step806, content management system110determines that a term in the at least two search terms does not occur at least the threshold number of times, content management system110may generate a corrected search suggestion for the user. To generate the corrected search suggestion, processor content management system110may generate a plurality of search term options for what the user may have meant to use, based on personalized vocabulary242, and present those search term options to the user.

At step810, content management system110may identify one or more search term options based on the first term. In some embodiments, content management system110may identify a prefix of the first term. Using a specific example, assume the search term submitted by client device202was “basetball game.” As those skilled in the art recognize, “game” is spelled correctly. For purposes of the example, assume that “game” occurs at least the threshold number of times. Accordingly, content management system110may determine that the prefix of the first team “basetball” is “b.” Content management system110does not need to perform similar operations on “game” because “game” is assumed to have occurred at least the threshold number of times.

Using the prefix, content management system110may identify a plurality of terms in personalized vocabulary242that include the same prefix as the first term. In other words, continuing with the above example, content management system110may identify a plurality of terms in personalized vocabulary242that begin with the letter “b.” In some embodiments, content management system110may generate a data set corresponding to the plurality of search term options. For example, an exemplary data set may include [basketball, basketballs, baseball, baseballs, basket, base, . . . , etc.]. The data set may include a plurality of terms in personalized vocabulary242that has the same prefix.

At step812, content management system110may rank each of the one or more search term options. After the data set is generated, content management system110may utilize ranking model308to determine at least one corrected search suggestion for the first term. Ranking model308may be representative of a model that ranks each of the search term options based on a variety of variables. In some embodiments, ranking model308may rank each of the search term options based on their frequency of occurrence in personalized vocabulary242. In some embodiments, ranking model308may rank each of the search term options based on their edit distances from the search term. In some embodiments, ranking model308may rank each of the search term options based on a data associated with their generation. In some embodiments, ranking model308may rank each of the search term options based on their location within the user's namespace.

At step814, content management system110may generate a set of phrases based on the one or more search term options and the second term. For example, based on the ranking, content management system110may add the search terms together to generate a set of phrases. Continuing with the above example, content management system110may generate an exemplary data set that may include: [basketball game, basketballs game, baseball game, baseballs game, basket game, base game, game basketball, game basketballs, game baseball, game baseballs, game basketball, game, base, etc.].

At step816, content management system110may compare each phrase to personalized vocabulary242. For example, searching service234may compare each phrase in the exemplary data set to personalized vocabulary242to determine a number of occurrences of each phrase. Continuing with the above example, content management system110may determine that “basketball game” occurs 40 times in personalized vocabulary242and “baseball game” occurs 20 times in personalized vocabulary242.

At step818, content management system110may present at least one corrected search suggestions to the user based on the ranking. In some embodiments, searching service234may present a single corrected search suggestion. In some embodiments, searching service234may present at least two corrected search suggestions. In some embodiments, searching service234may generate an actionable link for each corrected search suggestion. For example, a user may click on the corrected search suggestion, which would trigger a search request of that corrected search suggestion from client device202to searching service234.

FIG.9Aillustrates a system bus computing system architecture900, according to example embodiments. One or more components of system900may be in electrical communication with each other using a bus905. System900may include a processor (e.g., one or more CPUs, GPUs or other types of processors)910and a system bus905that couples various system components including the system memory915, such as read only memory (ROM)920and random access memory (RAM)925, to processor910. System900can include a cache of high-speed memory connected directly with, in close proximity to, or integrated as part of processor910. System900can copy data from memory915and/or storage device930to cache912for quick access by processor910. In this way, cache912may provide a performance boost that avoids processor910delays while waiting for data. These and other modules can control or be configured to control processor910to perform various actions. Other system memory915may be available for use as well. Memory915may include multiple different types of memory with different performance characteristics. Processor910may be representative of a single processor or multiple processors. Processor910can include one or more of a general purpose processor or a hardware module or software module, such as service1932, service2934, and service3936stored in storage device930, configured to control processor910, as well as a special-purpose processor where software instructions are incorporated into the actual processor design. Processor910may essentially be a completely self-contained computing system, containing multiple cores or processors, a bus, memory controller, cache, etc. A multi-core processor may be symmetric or asymmetric.

To enable user interaction with the computing device900, an input device945can represent any number of input mechanisms, such as a microphone for speech, a touch-sensitive screen for gesture or graphical input, keyboard, mouse, motion input, speech and so forth. An output device935can also be one or more of a number of output mechanisms known to those of skill in the art. In some instances, multimodal systems can enable a user to provide multiple types of input to communicate with computing device900. Communications interface940can generally govern and manage the user input and system output. There is no restriction on operating on any particular hardware arrangement and therefore the basic features here may easily be substituted for improved hardware or firmware arrangements as they are developed.

Storage device930may be a non-volatile memory and can be a hard disk or other types of computer readable media which can store data that are accessible by a computer, such as magnetic cassettes, flash memory cards, solid state memory devices, digital versatile disks, cartridges, random access memories (RAMs)925, read only memory (ROM)920, and hybrids thereof. Storage device930can include services932,934, and936for controlling the processor910. Other hardware or software modules are contemplated. Storage device930can be connected to system bus905. In one aspect, a hardware module that performs a particular function can include the software component stored in a computer-readable medium in connection with the necessary hardware components, such as processor910, bus905, display935, and so forth, to carry out the function.

FIG.9Billustrates a computer system950having a chipset architecture that can be used in executing the described method and generating and displaying a graphical user interface (GUI). Computer system950may be an example of computer hardware, software, and firmware that can be used to implement the disclosed technology. System950can include one or more processors955, representative of any number of physically and/or logically distinct resources capable of executing software, firmware, and hardware configured to perform identified computations. One or more processors955can communicate with a chipset960that can control input to and output from one or more processors955. In this example, chipset960outputs information to output965, such as a display, and can read and write information to storage device970, which can include magnetic media, and solid state media, for example. Chipset960can also read data from and write data to RAM975. A bridge980for interfacing with a variety of user interface components985can be provided for interfacing with chipset960. Such user interface components985can include a keyboard, a microphone, touch detection and processing circuitry, a pointing device, such as a mouse, and so on. In general, inputs to system950can come from any of a variety of sources, machine generated and/or human generated.

Chipset960can also interface with one or more communication interfaces990that can have different physical interfaces. Such communication interfaces can include interfaces for wired and wireless local area networks, for broadband wireless networks, as well as personal area networks. Some applications of the methods for generating, displaying, and using the GUI disclosed herein can include receiving ordered datasets over the physical interface or be generated by the machine itself by one or more processors955analyzing data stored in storage970or975. Further, the machine can receive inputs from a user through user interface components985and execute appropriate functions, such as browsing functions by interpreting these inputs using one or more processors955.

It can be appreciated that example systems900and950can have more than one processor910or be part of a group or cluster of computing devices networked together to provide greater processing capability.

For clarity of explanation, in some instances the present technology may be presented as including individual functional blocks including functional blocks comprising devices, device components, steps or routines in a method embodied in software, or combinations of hardware and software.

In some embodiments the computer-readable storage devices, mediums, and memories can include a cable or wireless signal containing a bit stream and the like. However, when mentioned, non-transitory computer-readable storage media expressly exclude media such as energy, carrier signals, electromagnetic waves, and signals per se.

Methods according to the above-described examples can be implemented using computer-executable instructions that are stored or otherwise available from computer readable media. Such instructions can comprise, for example, instructions and data which cause or otherwise configure a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. Portions of computer resources used can be accessible over a network. The computer executable instructions may be, for example, binaries, intermediate format instructions such as assembly language, firmware, or source code. Examples of computer-readable media that may be used to store instructions, information used, and/or information created during methods according to described examples include magnetic or optical disks, flash memory, USB devices provided with non-volatile memory, networked storage devices, and so on.

Devices implementing methods according to these disclosures can comprise hardware, firmware and/or software, and can take any of a variety of form factors. Typical examples of such form factors include laptops, smart phones, small form factor personal computers, personal digital assistants, and so on. Functionality described herein also can be embodied in peripherals or add-in cards. Such functionality can also be implemented on a circuit board among different chips or different processes executing in a single device, by way of further example.

The instructions, media for conveying such instructions, computing resources for executing them, and other structures for supporting such computing resources are means for providing the functions described in these disclosures.

Although a variety of examples and other information was used to explain aspects within the scope of the appended claims, no limitation of the claims should be implied based on particular features or arrangements in such examples, as one of ordinary skill would be able to use these examples to derive a wide variety of implementations. Further and although some subject matter may have been described in language specific to examples of structural features and/or method steps, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to these described features or acts. For example, such functionality can be distributed differently or performed in components other than those identified herein. Rather, the described features and steps are disclosed as examples of components of systems and methods within the scope of the appended claims.