Any and all applications for which a foreign or domestic priority claim is identified in the Application Data Sheet as filed with the present application, are hereby incorporated by reference in their entirety under 37 CFR 1.57.
The present invention is related to virtual desktops and search indexing.
Conventional search indexes created for personal use (e.g., to be used to search a user's local files and email) are designed to be installed and operated on physical, discrete, hardware such as the user's laptop or desktop computer. The actions required to create an inverted search index for a personal collection of files, emails, and attachment require significant use of computer resources, including processor, volatile memory, and non-volatile memory.
The following presents a simplified summary of one or more aspects in order to provide a basic understanding of such aspects. This summary is not an extensive overview of all contemplated aspects, and is intended to neither identify key or critical elements of all aspects nor delineate the scope of any or all aspects. Its sole purpose is to present some concepts of one or more aspects in a simplified form as a prelude to the more detailed description that is presented later.
An aspect of the disclosure relates to a system configured to generate search indexes, comprising: at least one computing device; an interface configured to communicate with a virtual desktop farm; a non-transitory computer storage medium having stored thereon executable instructions that direct the computing system to implement: a load balancing module configured to distribute indexing processes across multiple servers; a throttling module configured to limit a number of user indexing processes executed by the system and a number of concurrent data scanning operations; an initial index generation module configured to generate initial iterations of search indexes for a plurality of users associated with respective virtual desktops, wherein the initial index generation module is configured to: determine, for a first user associated with a first virtual desktop executed using the virtual desktop farm, if a search index has been generated for the first user; at partly in response to a determination that a search index has not been generated for the first user, begin generation of an initial iteration of a search index for the first user in accordance with the limitation on the number of user indexing processes and with the limitation on the number of concurrent data scanning operations; receive an indication that the first user has logged off the first virtual desktop; continue generating the initial iteration of the search index associated with the first user while the first virtual desktop is shut down; store the initial iteration of the search index associated with the first user on a shared data store that stores search indexes for the plurality of users associated with respective virtual desktops; an incremental search indexing module configured to initiate and perform an update to one or more existing iterations of search indexes associated with the plurality of users according to a schedule, including at least an existing iteration of a search index associated with the first user while the first virtual desktop is shut down; a search processing module configured to receive a search query from the first user while the first user is logged into the first virtual desktop, identify, utilizing an iteration of the search index associated with the first user and stored on the server storing search indexes for the plurality of users associated with respective virtual desktops, matching documents, and to cause search results corresponding to the matching documents to be presented via the first virtual desktop.
An aspect of the disclosure relates to a computer-implemented of method of managing search engine indexing with respect to a virtual desktop architecture, the method comprising: receiving, via a first plurality of virtual desktops, at a virtual resource management system comprising at least a processor device, indexing parameters from a first plurality of users, the indexing parameters identifying data types, or data sources, or both data types and data sources to be indexed; generating, by the virtual resource management system, initial iterations of search indexes for the first plurality of users associated with respective virtual desktops; storing the initial iterations of search indexes on a shared data storage system; generating, by the virtual resource management system, updated iterations of the search indexes on the shared data storage system for at least a portion of the first plurality of users associated with respective virtual desktops; and receiving, by the virtual resource management system, a search query from a first user in the first plurality of users, while the first user is logged into a first virtual desktop, and identifying, utilizing an iteration of the search index associated with the first user and stored on the shared data storage system, matching documents, and causing search results corresponding to the matching documents to be presented via the first virtual desktop, wherein the first user is inhibited from accessing initial or updated iterations of indexes of other users stored on the shared data storage system.
An aspect of the disclosure relates to a system configured to generate search indexes, comprising: at least one computing device; an interface configured to communicate with a virtual desktop farm; a non-transitory computer storage medium having stored thereon executable instructions that direct the computing system to implement: an initial index generation module configured to generate initial iterations of search indexes for a plurality of users associated with respective virtual desktops and store the initial iterations of search indexes on a shared data store; an incremental search indexing module configured to update at least some of existing iterations of search indexes associated with the plurality of users according to respective schedules; a search processing module configured to receive a search query from a first user while the first user is logged into the first virtual desktop, identify, utilizing an iteration of the search index associated with the first user and stored on the server storing search indexes for the plurality of users associated with respective virtual desktops, matching documents, and to cause search results corresponding to the matching documents to be presented via the first virtual desktop, wherein the first user is inhibited from accessing initial or updated iterations of indexes of other users stored on the shared data store.
Throughout the drawings, reference numbers may be re-used to indicate correspondence between referenced elements. The drawings are provided to illustrate example embodiments described herein and are not intended to limit the scope of the disclosure.
Example embodiments of methods and systems for generating search indexes for virtual desktops are described. Disclosed embodiments can support numerous types of indexes (e.g., inverted and non-inverted search indexes) including the example embodiments disclosed in U.S. Pat. No. 7,370,035, the content of which is hereby incorporated by reference in its entirety herein. As discussed in greater detail elsewhere herein, the disclosed architecture may provide one or more of the following technical advantages: an enhanced user experience, reduced virtual resource requirements, and/or centralized management of search indexing processes.
A search index may optionally be in the form of an inverted index comprising an index data structure that stores mappings of content (e.g., character strings) to a location in a document (e.g., a word processing document, an email document, a slide presentation, a spreadsheet, a PDF file, a web page, a database file, etc.). Thus, an inverted index may comprise a list of all the unique words/character strings (or normalized versions thereof) that appear in any indexed document, and for each word/character string, the index stores which fields of which documents or files contain that word or character string. An inverted index may be used to quickly resolve a query by jumping to the corresponding word/character string identifier in the inverted index.
As discussed above, conventional search indexes created for personal use are designed to be installed and operated on physical, discrete, hardware such as the user's laptop or desktop computer. The actions required to create an inverted search index for a personal collection of files, emails, and attachment require significant use of computer resources, including processor, volatile memory, and non-volatile memory. Such resources may not be readily available in a virtual desktop environment.
In a typical conventional virtual desktop architecture, the processing power is provided by a centralized server and, to minimize costs, the amount of CPU and memory assigned to each user are often kept at a bare minimum to support only basic computational needs. This reduction in available processing power and memory for a given virtual desktop user creates significant problems with respect to creating a search index for that user, because search indexing processes are typically designed to utilize considerable processing power and memory during index creation in order to reduce the computer resource demands and provide for quick response when processing user queries.
Further, in a typical conventional virtual desktop architecture, the CPU and memory assigned to the user when the user launches a virtual desktop is only assigned to that user when the user is actively using the user's desktop. The resources are no longer allocated to the user once the user is logged off the virtual desktop. Disadvantageously, if no computational resources are assigned on the user's behalf when the user is logged off, there are no computational resources made available to update a search index of the user's files until that user logs back in to the virtual desktop. Thus, when the user log backs in to the user's virtual desktop, the user's search index will often be out-of-date, providing a poor user experience when attempting to search for recent or modified documents. In order to update the search index when the user is logged in to the virtual desktop, significant processing power will be consumed, and such processing power will not be available to the user for other uses while the index is updating.
Aspects of the disclosure relate to enhanced architectures configured to perform search indexing processes for a virtual desktop of a user. The indexing process may be configured to run on a central indexing server configured to dynamically utilize resources of the server to respond to the transient demands of the indexing operation. The indexing process may be uniquely bound to the search user interface process (which displays a search user interface including search fields and providing search results) operating directly within the user's virtual desktop, and may prevent a given user from accessing another index (e.g., the index of another user). The index may be created by the indexing server and saved to a centralized network file share that the user's virtual desktop can access. A non-limiting example of a search user interface is illustrated in
A one-to-one correspondence may be created between an interface process running on the virtual desktop, which may have a small (relative to a physical desktop computer), fixed allocation of resources, and an indexing process executing on an indexing server. The indexing process may be configured to dynamically request and consume significantly more resources on the server. The indexing server may be configured to host a plurality of index processes for a respective plurality of virtual desktops, while concurrently maintaining the plurality of one-to-one correspondences between a given search user interface process and the corresponding indexing process.
As illustrated in
By contrast, conventional implementations do not possess this capability. Instead, conventional solutions may attempt to address the challenges posed by virtual desktops using one of the following techniques. One conventional implementation allocates another fixed resource on the user's behalf, which would either be too small a set of resources to perform the necessary operation and result in a longer time to complete the operation, or would be too large a set of resources and result in significant extra expense. Another conventional implementation dynamically adjusts the CPU and memory assigned for each virtual desktop. However, the users' virtual desktops do not communicate with one other and this conventional implementation is unable to satisfactorily handle situations where multiple users simultaneously demand an increase in their allotment of resources and instead causes a situation where resources are over committed. Still another conventional technique offers Software-as-a-Service (SaaS). However, the user interface provided by a conventional SaaS implementation is typically in the form of a simple browser interface that does not provide a deep and rich interaction with the user's local data and operating system. By contrast, the present invention has a user interface that may operate as an executable installed directly within the virtual desktop operating system and therefore possessing access to the files, emails, and data that are local to that user.
The indexing processes may be utilized for different functions and may have significantly different resource requirements. Examples of such indexing processes may include initial indexing, incremental indexing, querying, reviewing search results, and ongoing refreshing of the user interface (which may display a search user interface including search fields configured to receive search strings and providing search results) for an already-executed query.
An initial indexing operation builds the original, initial index iteration for a user and scans the data to be indexed. The user may specify the data types and/or sources to be indexed. By way of illustrative example, and with reference to indexing resource usage profile 302, initial indexing may take several hours to perform and may use sustained loads 302 of about 50% of a CPU core (depending in part on the CPU processing power), with repeated transient loads of a full CPU core. Memory usage can be significantly higher (e.g., twice as much or more) than needed during steady-state operations.
In particular, an incremental indexing operation scans already indexed user data, identifying items that have changed since the last index was generated, and adding, modifying, and/or deleting records reflecting such changes. By way of example, and with reference to incremental indexing usage profile 304, incremental indexing may, in certain instances, range from about 10% of CPU core processing power when identifying previously indexed items that have not changed, up to CPU core processing power usage similar to that of initial indexing when indexing new or changed items (e.g., up to transient loads of the full CPU core processing power). This operation may, by way of example, take several minutes. It is understood that the percentage of CPU core processing power utilization may depend in part on the processing power of the CPU core, and thus the example utilizations described herein may be different for different systems and CPUs.
A querying operation may involve receiving user search terms, running the search terms against the search index, obtaining matching results for each portion of the overall index, merging the results for the various portions together, and sorting the merged matching results in a default order or in an order specified by the user. The results may be presented to the user via the user's virtual desktop. With reference to querying usage profile 306, the querying process may utilize, by way of example, 5% of the processing power of a CPU core for a time period (e.g., a fraction of a second to a few seconds, depending on the search complexity and index sizes).
A reviewing operation involves processing user navigating through search results, including navigating up or down in a results listing, navigating to new pages of results, or scrolling through the results (e.g., to the middle or end of the result set). With reference to reviewing usage profile 308, the reviewing operation may utilize, by way of example, 1% of the processing power of a CPU core for a time period (e.g., a second), depending on the nature of the user navigation. Certain optional operations performed during a review, such as changing a default sort order, may effectively result in an execution of a new query, with similar processing power utilization.
A user interface refresh operation includes refreshing the results displayed to the user via the user interface, independent of instances when the user requests a refresh. Because the index may be updating at any given moment (e.g., as a result of a modification of a document, an addition of a document, a deletion of a document), the results may be refreshed at a specified interval to ensure the search results are not stale. With reference to refresh usage profile 310, a user interface refresh operation may utilize, by way of example, 1% or 5% of the processing power of a CPU core, depending on whether the index had been updated since the last refresh.
Thus, the computer resource demands of the indexing process can vary significantly. By way of example the CPU usage for an indexing process, may vary from a sustained load of 50% of CPU core processing power, with peaks of 100% of CPU core processing power, all the way down to about 0%-1% of CPU core processing power, with a time averaged load of, by way of example, 10% of CPU core processing power for a typical user. Conventional available technologies with static CPU allocation could allocate a full CPU for this user to satisfy the peak load. While this approach may ensure that there is adequate processing power for peak indexing demands, on the average, about 90% of allocated CPU would be unused, and hence wasted.
Conventional available technologies with static CPU allocation could theoretically allocate 10% of a CPU to indexing operations, but disadvantageously, initial indexing may take more than 10 times longer and could take an extended period of time (e.g., weeks) to finish. Conventional available technologies with dynamic allocation could attempt to allocate the appropriate amount of CPU processing power for indexing operations, but are unable to ensure that sufficient resources will be available if multiple users request a dynamic allocation at the same time. Thus conventional static and dynamic allocations technologies suffer from the shortcoming of leaving a significant quantity of resources idle in case an indexing process might request them at any point in time.
An aspect of the disclosure provides a common resource pool that may be allocated to be shared by multiple indexing processes (e.g., one for each user).
A Virtual Resource Manager (VRM), such as the VRM 502 illustrated in
User terminals, such as a thin client (which may include an operating system and may store locally the device specific configuration settings), zero client (which does not require configuration and may provide any local storage or operating system), and/or thick client (which may be a fully functional personal computer or laptop), may be networked to the virtual desktop server farm 506, where the virtual desktop server farm 506 provides the processing power (e.g., for application execution) and the user terminal displays interfaces (e.g., the search user interface, word processing user interfaces, spreadsheet user interfaces, and/or other application user interfaces) and data, and also receives user inputs (e.g., via keyboard, mouse, touch screen, voice commands, or otherwise) which may be communicated to a virtual desktop server.
The VRM 502 may load the user's index and provide updates and query results back to the user's interface process for display via the user's virtual desktop. For larger installations, the VRM 502 may control multiple indexing servers operating as a server farm 508. The various illustrated components may communicate with each other over one or more wired and/or wireless networks and/or device buses (e.g., local area networks, wide area networks, the Internet, USB bus, etc.).
The VRM 502 may use a credential manager, such as Windows Credential Manager for a Windows environment, to store securely passed user credentials from the virtual desktop interface process, create a domain user account on the VRM server that will run the indexing process, ensure access to a network file share 510, and to instantiate the indexing process as that user. The VRM 502 may thus ensure that the indexing process has access to the index belonging to that user and that any updates to the index are performed using that user's data. For the purposes of indexing email data 512 (e.g., Microsoft Exchange email), the indexing process may create an email profile on the server that will be used by the indexing process, to ensure that that server has the ability to create a connection with the email exchange (e.g., a Messaging Application Programming Interface (MAPI) connection with Microsoft Exchange) on behalf of the user. For example, the VRM 502 may utilize Rate Control Protocol (RCP), Transmission Control Protocol (TCP), and port 135 for MAPI communications with a Microsoft Exchange server.
The VRM 502 may also monitor and control throttling settings for some or all of the different indexing processes. The server hardware that provides the indexing processes may have limitations on the number of total user indexing processes that can be run and the number of concurrent data scanning operations that can be done. The VRM 502 may be configured to enable an administrator to input resource optimization values for these throttling settings (e.g., a maximum number of user indexing processes setting, and a maximum number of permitted concurrent data scanning operations). The VRM 502 may then ensure the throttling settings are complied with when performing indexing operations.
With respect to the limit on total processes, the VRM 502 may be configured to detect when a user login would cause the total processes limitation to be exceeded, and optionally notify the user that all resources are currently in use. The user resource request may then queued for newly released resources. When the VRM 502 detects that resources have been released and are sufficient for executing an indexing process, the user may optionally be so informed and the released resources may be used to execute an indexing process for the user.
With respect to the limit on concurrent processes, the VRM 502 may cycle through a list of running indexing processes and provide time-slices to each process thereby enabling each of the processes to execute (e.g., in a round-robin fashion) without attempting to exceed the available resources. By way of example, a given data scan may be performed for email (e.g., Microsoft Exchange email). In a similar fashion, total connections to email servers (e.g., a Microsoft Exchange server or email server farm) can be throttled by the VRM 502. As similarly discussed above, there is a substantial difference in the computational resources needed between conducting an initial index of a user's Exchange data and conducting an incremental index limited to the changes from the last completed indexing operation. Therefore, the VRM 502 may provide separate settings for email (e.g., Exchange email) throttling: a setting that limits the number of connections made by the indexing server or servers conducting an initial indexing and another setting that limits the number of incremental indexing operations made by the indexing server or servers.
Similarly, it may be desirable to throttle other internal or external data sources to prevent indexing processes from excessively loading system resources. By way of example, such data sources may include local data sources (e.g., Microsoft SharePoint, Symantec Enterprise Vault, local data storage, archiving, and electronic document management systems, etc.) or remotely accessed data from Software-as-a-Service (SaaS) cloud storage systems (e.g., offered by providers such as Box, Dropbox, OneDrive, Google Drive, etc.) and Internet Message Access Protocol (IMAP) mail providers (e.g., Gmail, Yahoo, and Outlook.com) that enable users to access email messages stored on a remote mail server via IMAP. In each these examples, different throttle setting interfaces may optionally be provided enabling an administrator or other user to configure throttling separately for initial indexing and for incremental indexing.
Similarly, separate throttling controls may be provided for some or all of the different indexing processes. For example, a setting may be provided to limit the refresh rate of search results displayed via search results user interface. Conventionally, on an installation on a physical machine, the refresh process may be performed more frequently (e.g., more than once a second) because the indexing process has access to available extra CPU cycles provided by the physical machine's CPU. However, in the case of a virtual desktop, to more effectively utilize resources on the server running the indexing processes, the refresh throttling may be used to limit automatic refreshes of the search results to a configurable setting. For example, the refresh setting may be set to every 30 seconds, 1 minute, 5 minutes, or other time period. Optionally, the VRM 502 may be configured to override the refresh throttling setting when certain conditions are detected, such as when the user manually initiates a refresh of the interface, changes search parameters, or re-sorts search results.
The VRM 502 may establish a connection between a configuration of the interface process and the indexing process. Optionally, the interface process and the indexing process establish their own respective connection with a centralized network storage system 514 which, in addition to storing the search index, may store the configuration files for the interface process and the indexing process.
This configuration enables a user to utilize the interface process to modify parameters associated with the indexing process. Examples of indexing parameters may include, but are not limited to, some or all of the following: the file folder paths to index, the email folder paths to index, an indication as whether to index content and/or metadata for a given folder, the frequency with which to re-index a given data type/folder, etc.
The disclosed system enables the user to take post-search actions on search results, automatically handling the cases where the action is performed by the interface process, the indexing process, or performed directly against the data source. Non-limiting examples of actions taken by the interface process include but are not limited to some or all of the following: generating a rich preview of a binary file (e.g., providing a human readable preview of the file), executing an email open command, navigating to an email folder, or opening a new email compose interface. Non-limiting examples of actions taken against the indexing process include some or all of the following: displaying specific metadata, such as last time indexed or status of indexing. Examples of actions taken against the data source include but are not limited to some or all of the following: opening a file, navigating to a file folder, deleting a file, deleting an email, replying to an email, or marking an email as read or unread.
Certain indexing processes will now be discussed in greater detail.
One challenge in creating the initial search index for a user (e.g., an inverted index) is that, depending on the data, it could take hours or days to complete. Until the initial index is completed being built, the index is of limited use to the user. However, there may be many circumstances where the user is unable to keep the virtual desktop user interface running for hours or days at a time. In order to address this challenge, the disclosed VRM is optionally configured to detect when an initial index is being built and to continue executing the indexing process until the initial build of the index is complete, even if the user's virtual desktop is not open or executing.
Optionally, the indexing process can be configured to initiate incremental indexing on a given schedule to thereby ensure that that index is kept substantially up-to-date, without requiring the user to launch his virtual desktop and start the interface process. Thus, the indexing process may be initiated and performed even when the virtual desktop and interface process are not executing. The scheduling of the indexing process may be independent of schedule settings used while the interface process is running. Non-limiting examples of configurable schedule options, which may be displayed to the user via a scheduling user interface, may include some or all of the following: every x minutes, hourly, every x hours, daily at a given time, and weekly at a given time. By way of illustrative example, a user can specify that the indexing process is to be performed every weekday morning at 6 AM to ensure the index is updated substantially immediately prior to the workday.
In some virtual desktop infrastructures there may be hundreds or thousands of users supported over a multitude of servers. To address this challenge the disclosed system optionally enables the collection of users' indexing processes to be spread across multiple servers (e.g., across servers in the indexing server farm 508 illustrated in
The discussions above have, for illustrative purposes, primarily focused on examples of indexing files, email, and unstructured data that are stored on a central network file share. Optionally, the user interface can be connected to a pre-existing index created by a third party system or application. The user interface may be configured to query this third party index using a brokered search request and return the results back for display via the same interface used to display search results from the index created and controlled by the disclosed embodiment.
With references to
With reference to
With reference to
The memory 548 may contain computer program instructions that the processing unit 540 may execute in order to implement one or more embodiments of the present disclosure. The memory 548 may include RAM, ROM and/or other persistent or non-transitory computer-readable storage media. The memory 548 may store an operating system 552 that provides computer program instructions for use by the processing unit 540 in the general administration and operation of the VRM 502. The memory 548 may further include other information for implementing aspects of the present disclosure.
In addition, the memory 548 may include a data processing module 554 that may be executed by the processing unit 540. Optionally, the data processing module 554 implements aspects of the present disclosure. For example, the data processing module 554 can be configured to process user queries, instructions, data and content from the disclosed data stores and systems, etc.
Certain example processes will now be described with reference to the figures.
At block 710, the VRM accesses the throttling settings, if any, from memory (e.g., those throttle settings specified by an administrator as discussed above with respect to
At block 806, the VRM accesses the incremental index specification from the data store to determine whether an incremental indexing operation is to be performed. The incremental index operation may also be initiated in response to a manual indexing command from the user. At block 808, the VRM accesses throttling settings (if any), such as those discussed elsewhere herein. At block 810, the VRM performs an incremental indexing operation to generate an updated iteration of the index according to the schedule and throttling settings, optionally independent of the state of the virtual desktop. Thus, the VRM can initiate and perform an incremental indexing operation even when the user is logged off and the user's virtual desktop is not operating, thereby enabling the incremental index operation to be performed during non-working hours if so desired. This may reduce the amount of peak loading on the VRM, as it allows different users' incremental index operations to be spread out over a larger portion of the day, including portions of the day where some or all of the users are not utilizing their virtual desktops or the indexing server farm. Optionally a user interface may be provided to terminal (e.g., an administrator terminal), enabling an administrator or other authorized user to prevent the performance of an incremental indexing process when the virtual desktop is shut down and the user is logged-off. If the VRM is configured to prevent the performance of an incremental indexing process when the virtual desktop is shut down and the user is logged-off, the VRM will accordingly not perform an incremental indexing process when the virtual desktop is shut down and the user is logged-off.
As noted above, the VRM may be configured to provide centralized management of indexing-related processes, measure various performance parameters, perform statistical analysis, log events, and generate corresponding reports. Certain example user interfaces and reports will now be discussed with respect to the figures. The user interfaces and reports may be generated by the VRM and presented on a user interface terminal, such as that of an administrator. The various reports may be limited to certain time periods (e.g., the previous minute, the previous hour, the previous day, a specified range of time, etc.).
A source user interface may optionally be provided enabling the user to instruct the VRM to limit search to a particular indexed source (e.g., Outlook mail, Outlook mail inbox, Outlook mail sent box, Outlook contacts, Outlook calendar, Outlook tasks, Outlook Notes, Sharepoint, specific Sharepoint files, all files, specific file folders, etc.). A search result listing may be provided, and a preview of a matching document corresponding to a selected search result listing may optionally be displayed in a preview pane. The search user interface may optionally highlight (e.g., via color, bolding, underlining, or otherwise) content in the preview pane that matches the search query. The search user interface may enable a search result to be acted on (e.g., open a search result, respond to an email, send by email, mark an email as read or unread, delete, move, etc.). Other example search user interfaces may have fewer or additional fields, controls, and/or functionality.
Thus, methods and systems are described for enabling search indexes to be created and updated in a virtual desktop environment while optionally providing an enhanced user experience, reduced virtual resource requirements, and/or centralized management of search indexing processes.
The user terminals described herein may be in the form of a mobile communication device (e.g., a cell phone), laptop, tablet computer, interactive television, game console, media streaming device, head-wearable display, networked watch, etc. They may optionally include displays, user input devices (e.g., touchscreen, keyboard, mouse, voice recognition, etc.), network interfaces, etc.
The methods and processes described herein may have fewer or additional steps or states and the steps or states may be performed in a different order. Not all steps or states need to be reached. The methods and processes described herein may be embodied in, and fully or partially automated via, software code modules executed by one or more general purpose computers. The code modules may be stored in any type of computer-readable medium or other computer storage device. Some or all of the methods may alternatively be embodied in whole or in part in specialized computer hardware. The systems described herein may optionally include displays, user input devices (e.g., touchscreen, keyboard, mouse, voice recognition, etc.), network interfaces, etc.
The results of the disclosed methods may be stored in any type of computer data repository, such as relational databases and flat file systems that use volatile and/or non-volatile memory (e.g., magnetic disk storage, optical storage, EEPROM and/or solid state RAM).
The various illustrative logical blocks, modules, routines, and algorithm steps described in connection with the embodiments disclosed herein can be implemented as electronic hardware, computer software, or combinations of both. To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, modules, and steps have been described above generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. The described functionality can be implemented in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the disclosure.
Moreover, the various illustrative logical blocks and modules described in connection with the embodiments disclosed herein can be implemented or performed by a machine, such as a general purpose processor device, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general purpose processor device can be a microprocessor, but in the alternative, the processor device can be a controller, microcontroller, or state machine, combinations of the same, or the like. A processor device can include electrical circuitry configured to process computer-executable instructions. In another embodiment, a processor device includes an FPGA or other programmable device that performs logic operations without processing computer-executable instructions. A processor device can also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration. Although described herein primarily with respect to digital technology, a processor device may also include primarily analog components. A computing environment can include any type of computer system, including, but not limited to, a computer system based on a microprocessor, a mainframe computer, a digital signal processor, a portable computing device, a device controller, or a computational engine within an appliance, to name a few.
The elements of a method, process, routine, or algorithm described in connection with the embodiments disclosed herein can be embodied directly in hardware, in a software module executed by a processor device, or in a combination of the two. A software module can reside in RAM memory, flash memory, ROM memory, EPROM memory, EEPROM memory, registers, hard disk, a removable disk, a CD-ROM, or any other form of a non-transitory computer-readable storage medium. An exemplary storage medium can be coupled to the processor device such that the processor device can read information from, and write information to, the storage medium. The storage medium can be integral to the processor device. The processor device and the storage medium can reside in an ASIC. The ASIC can reside in a user terminal. In the alternative, the processor device and the storage medium can reside as discrete components in a user terminal.
Conditional language used herein, such as, among others, “can,” “may,” “might,” “may,” “e.g.,” and the like, unless specifically stated otherwise, or otherwise understood within the context as used, is generally intended to convey that certain embodiments include, while other embodiments do not include, certain features, elements and/or steps. Thus, such conditional language is not generally intended to imply that features, elements and/or steps are in any way required for one or more embodiments or that one or more embodiments necessarily include logic for deciding, with or without other input or prompting, whether these features, elements and/or steps are included or are to be performed in any particular embodiment. The terms “comprising,” “including,” “having,” and the like are synonymous and are used inclusively, in an open-ended fashion, and do not exclude additional elements, features, acts, operations, and so forth. Also, the term “or” is used in its inclusive sense (and not in its exclusive sense) so that when used, for example, to connect a list of elements, the term “or” means one, some, or all of the elements in the list.
Disjunctive language such as the phrase “at least one of X, Y, Z,” unless specifically stated otherwise, is otherwise understood with the context as used in general to present that an item, term, etc., may be either X, Y, or Z, or any combination thereof (e.g., X, Y, and/or Z). Thus, such disjunctive language is not generally intended to, and should not, imply that certain embodiments require at least one of X, at least one of Y, or at least one of Z to each be present.
While the phrase “click” may be used with respect to a user selecting a control, menu selection, or the like, other user inputs may be used, such as voice commands, text entry, gestures, etc. User inputs may, by way of example, be provided via an interface, such as via text fields, wherein a user enters text, and/or via a menu selection (e.g., a drop down menu, a list or other arrangement via which the user can check via a check box or otherwise make a selection or selections, a group of individually selectable icons, etc.). When the user provides an input or activates a control, a corresponding computing system may perform the corresponding operation. Some or all of the data, inputs and instructions provided by a user may optionally be stored in a system data store (e.g., a database), from which the system may access and retrieve such data, inputs, and instructions. The notifications and user interfaces described herein may be provided via a Web page, a dedicated or non-dedicated phone application, computer application, a short messaging service message (e.g., SMS, MMS, etc.), instant messaging, email, push notification, audibly, and/or otherwise.
The user terminals described herein may be in the form of a mobile communication device (e.g., a cell phone), laptop, tablet computer, interactive television, game console, media streaming device, head-wearable display, networked watch, zero client, thin client, thick client, etc. The user terminals may optionally include displays, user input devices (e.g., touchscreen, keyboard, mouse, voice recognition, etc.), network interfaces, etc.
While the above detailed description has shown, described, and pointed out novel features as applied to various embodiments, it can be understood that various omissions, substitutions, and changes in the form and details of the devices or algorithms illustrated can be made without departing from the spirit of the disclosure. As can be recognized, certain embodiments described herein can be embodied within a form that does not provide all of the features and benefits set forth herein, as some features can be used or practiced separately from others. The scope of certain embodiments disclosed herein is indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.
Number | Name | Date | Kind |
---|---|---|---|
5111398 | Nunberg et al. | May 1992 | A |
5202982 | Gramlich | Apr 1993 | A |
5303361 | Colwell et al. | Apr 1994 | A |
5659732 | Kirsch | Aug 1997 | A |
5671426 | Armstrong, III | Sep 1997 | A |
5692173 | Chew | Nov 1997 | A |
5704060 | Del Monte | Dec 1997 | A |
5704560 | Wimmer | Jan 1998 | A |
5717923 | Dedrick | Feb 1998 | A |
5721897 | Rubinstein | Feb 1998 | A |
5724424 | Gifford | Mar 1998 | A |
5724521 | Dedrick | Mar 1998 | A |
5724524 | Hunt et al. | Mar 1998 | A |
5748954 | Mauldin | May 1998 | A |
5752238 | Dedrick | May 1998 | A |
5754938 | Herz et al. | May 1998 | A |
5754939 | Herz et al. | May 1998 | A |
5768521 | Dedrick | Jun 1998 | A |
5778361 | Nanjo et al. | Jul 1998 | A |
5794210 | Goldhaber et al. | Aug 1998 | A |
5819273 | Vora et al. | Oct 1998 | A |
5826241 | Stein et al. | Oct 1998 | A |
5832208 | Chen et al. | Nov 1998 | A |
5835087 | Herz et al. | Nov 1998 | A |
5848397 | Marsh et al. | Dec 1998 | A |
5848407 | Ishikawa et al. | Dec 1998 | A |
5852820 | Burrows | Dec 1998 | A |
5855008 | Goldhaber et al. | Dec 1998 | A |
5864845 | Voorhees et al. | Jan 1999 | A |
5864846 | Voorhees et al. | Jan 1999 | A |
5903882 | Asay et al. | May 1999 | A |
5907837 | Ferrel et al. | May 1999 | A |
5918014 | Robinson | Jun 1999 | A |
5920854 | Kirsch et al. | Jul 1999 | A |
5920859 | Li | Jul 1999 | A |
5951731 | Tsunetomo et al. | Sep 1999 | A |
6006225 | Bowman | Dec 1999 | A |
6029195 | Herz | Feb 2000 | A |
6035325 | Potts | Mar 2000 | A |
6070158 | Kirsch | May 2000 | A |
6073133 | Chrabaszcz | Jun 2000 | A |
6078866 | Buck et al. | Jun 2000 | A |
6085193 | Malkin et al. | Jul 2000 | A |
6112172 | True et al. | Aug 2000 | A |
6182068 | Culliss | Jan 2001 | B1 |
6216122 | Elson | Apr 2001 | B1 |
6269361 | Davis et al. | Jul 2001 | B1 |
6330567 | Chao | Dec 2001 | B1 |
6366923 | Lenk et al. | Apr 2002 | B1 |
6421675 | Ryan et al. | Jul 2002 | B1 |
6496820 | Tada et al. | Dec 2002 | B1 |
6513028 | Lee | Jan 2003 | B1 |
6564213 | Ortega et al. | May 2003 | B1 |
6606304 | Grinter et al. | Aug 2003 | B1 |
6615237 | Kyne et al. | Sep 2003 | B1 |
6638314 | Meyerzon | Oct 2003 | B1 |
6665668 | Sugaya et al. | Dec 2003 | B1 |
6700591 | Sharpe | Mar 2004 | B1 |
6704747 | Fong | Mar 2004 | B1 |
6711565 | Subramaniam et al. | Mar 2004 | B1 |
6751603 | Bauer et al. | Jun 2004 | B1 |
6757713 | Ogilvie et al. | Jun 2004 | B1 |
6826594 | Pettersen | Nov 2004 | B1 |
6847959 | Arrouye et al. | Jan 2005 | B1 |
6862713 | Kraft et al. | Mar 2005 | B1 |
6873982 | Bates et al. | Mar 2005 | B1 |
6904450 | King et al. | Jun 2005 | B1 |
6961731 | Holbrook | Nov 2005 | B2 |
7035903 | Baldonado | Apr 2006 | B1 |
7047502 | Petropoulos et al. | May 2006 | B2 |
7054855 | Basso et al. | May 2006 | B2 |
7069497 | Desai | Jun 2006 | B1 |
7370035 | Gross et al. | May 2008 | B2 |
7424510 | Gross et al. | Sep 2008 | B2 |
7424676 | Carlson | Sep 2008 | B1 |
7496559 | Gross et al. | Feb 2009 | B2 |
7571325 | Cooley | Aug 2009 | B1 |
7702636 | Sholtis | Apr 2010 | B1 |
7707255 | Satterfield | Apr 2010 | B2 |
7945914 | Hasiuk et al. | May 2011 | B2 |
8019741 | Gross et al. | Sep 2011 | B2 |
8086953 | Gabber | Dec 2011 | B1 |
8260840 | Sirota | Sep 2012 | B1 |
8498977 | Gross et al. | Jul 2013 | B2 |
8856093 | Gross et al. | Oct 2014 | B2 |
20010027406 | Araki et al. | Oct 2001 | A1 |
20010027450 | Shinoda | Oct 2001 | A1 |
20010029508 | Okada et al. | Oct 2001 | A1 |
20010039490 | Verbitsky et al. | Nov 2001 | A1 |
20020004735 | Gross | Jan 2002 | A1 |
20020019679 | Okada et al. | Feb 2002 | A1 |
20020055981 | Spaey et al. | May 2002 | A1 |
20020073078 | Ku et al. | May 2002 | A1 |
20020083178 | Brothers | Jun 2002 | A1 |
20020087408 | Burnett | Jul 2002 | A1 |
20020092019 | Marcus | Jul 2002 | A1 |
20020111962 | Crucs | Aug 2002 | A1 |
20020165707 | Call | Nov 2002 | A1 |
20020169763 | Tada et al. | Nov 2002 | A1 |
20020178009 | Firman | Nov 2002 | A1 |
20020184317 | Thankachan | Dec 2002 | A1 |
20030014415 | Weiss et al. | Jan 2003 | A1 |
20030037321 | Bowen | Feb 2003 | A1 |
20030130993 | Mendelevitch et al. | Jul 2003 | A1 |
20030171910 | Abir | Sep 2003 | A1 |
20030225764 | Smith et al. | Dec 2003 | A1 |
20030227489 | Arend et al. | Dec 2003 | A1 |
20030229898 | Babu et al. | Dec 2003 | A1 |
20030233419 | Beringer | Dec 2003 | A1 |
20040073443 | Gabrick et al. | Apr 2004 | A1 |
20040128285 | Green | Jul 2004 | A1 |
20040133564 | Gross et al. | Jul 2004 | A1 |
20040143564 | Gross et al. | Jul 2004 | A1 |
20040143569 | Gross et al. | Jul 2004 | A1 |
20040172389 | Galai et al. | Sep 2004 | A1 |
20040205514 | Sommerer | Oct 2004 | A1 |
20040230891 | Pravetz | Nov 2004 | A1 |
20050204191 | McNally | Sep 2005 | A1 |
20050223061 | Auerbach | Oct 2005 | A1 |
20050256846 | Zigmond et al. | Nov 2005 | A1 |
20060064394 | Dettinger | Mar 2006 | A1 |
20060095424 | Petropoulos et al. | May 2006 | A1 |
20060168067 | Carlson et al. | Jul 2006 | A1 |
20060195379 | Abecassis | Aug 2006 | A1 |
20060195481 | Arrouye | Aug 2006 | A1 |
20060224604 | Landsman | Oct 2006 | A1 |
20070112783 | McCreight | May 2007 | A1 |
20070192423 | Karlson | Aug 2007 | A1 |
20070226204 | Feldman | Sep 2007 | A1 |
20070240035 | Sthanikam | Oct 2007 | A1 |
20080034073 | McCloy | Feb 2008 | A1 |
20080114731 | Kumar | May 2008 | A1 |
20080114761 | Gross et al. | May 2008 | A1 |
20080133487 | Gross et al. | Jun 2008 | A1 |
20080141365 | Soegtrop | Jun 2008 | A1 |
20080147818 | Sabo | Jun 2008 | A1 |
20080208812 | Quoc | Aug 2008 | A1 |
20090006332 | Mowatt et al. | Jan 2009 | A1 |
20090119268 | Bandaru | May 2009 | A1 |
20090150363 | Gross et al. | Jun 2009 | A1 |
20090222406 | Allred | Sep 2009 | A1 |
20090328218 | Tsurukawa | Dec 2009 | A1 |
20100023502 | Marlow | Jan 2010 | A1 |
20100169320 | Patnam | Jul 2010 | A1 |
20100274783 | Chevalier et al. | Oct 2010 | A1 |
20100332454 | Prahlad | Dec 2010 | A1 |
20110055177 | Chakra | Mar 2011 | A1 |
20110126142 | Zhou | May 2011 | A1 |
20110182422 | Anderson | Jul 2011 | A1 |
20110208775 | Brette et al. | Aug 2011 | A1 |
20110252033 | Narang | Oct 2011 | A1 |
20120017178 | Mulloy | Jan 2012 | A1 |
20120197912 | Grigsby | Aug 2012 | A1 |
20120209847 | Rangan | Aug 2012 | A1 |
20120278303 | Krishnaprasad et al. | Nov 2012 | A1 |
20120290555 | Wu et al. | Nov 2012 | A1 |
20120290592 | Ishii | Nov 2012 | A1 |
20120330887 | Young | Dec 2012 | A1 |
20130042083 | Mutalik | Feb 2013 | A1 |
20130166909 | Agrawal | Jun 2013 | A1 |
20130325873 | Sitsky | Dec 2013 | A1 |
20130326333 | Hashmi | Dec 2013 | A1 |
20140052825 | Luecke | Feb 2014 | A1 |
20140081984 | Sitsky | Mar 2014 | A1 |
20140172783 | Suzuki | Jun 2014 | A1 |
20140289223 | Colwell et al. | Sep 2014 | A1 |
20140310324 | Branton | Oct 2014 | A1 |
20140317425 | Lien | Oct 2014 | A1 |
20140344249 | Magistrado | Nov 2014 | A1 |
20140359411 | Botta et al. | Dec 2014 | A1 |
20150074116 | Huang | Mar 2015 | A1 |
20150095363 | Gross et al. | Apr 2015 | A1 |
20150112996 | Mishra | Apr 2015 | A1 |
20150161159 | Provenzano | Jun 2015 | A1 |
20150278764 | Patil | Oct 2015 | A1 |
Number | Date | Country |
---|---|---|
WO 9847264 | Oct 1998 | WO |
WO 9901802 | Jan 1999 | WO |
WO 9939286 | Aug 1999 | WO |
WO 9948028 | Sep 1999 | WO |
WO 0016218 | Mar 2000 | WO |
WO 0041090 | Jul 2000 | WO |
WO 0067159 | Nov 2000 | WO |
WO 2004023243 | Mar 2004 | WO |
Entry |
---|
Barth, Steve, “Personal Toolkit: Navigating Information and Ideas,” KMWorld Apr. 2003, vol. 12, Issue 4; printed from http://www.kmworld.com/publications/magazine/index.cfm?action=readarticle&Article_id+1505&publication_id=1. |
Computing Service, Email Addresses in Microsoft Outlook 98, Dec. 5, 2000, pp. 1-3. |
Ellison, Carol, “Info to Go,” Jun. 30, 2002; printed from http://www.pcmag.com/article2/0, 1759,3575,00.asp. |
Goodman, Danny, Chapter 14, Section 14.5; “JavaScript & DHTML Cookbook” ISBN: 0-596-00467-2; Publisher: O'Reilly; Print Publication Date Apr. 1, 2003. |
Halpin, Jon, “PC Data Finder Goes A-Hunting,” Jun. 19, 2001; printed from http://www.pcmag.com/article2/0,4149,144228,00.asp. |
http://www2.essex.ac.uk/cs/services/email/addressing2.html—searched on www.waybackmachine.com—Internet Archive Wayback Machine, Search Results for Jan. 1, 1996-Mar. 5, 2007. |
International Search Report for PCT/US2003/027241, filed Sep. 3, 2003. |
Inverted index, Wikipedia, http://en.wikipedia.org/wiki/Inverted_index; Dec. 12, 2006. |
“Lotus Magellan Explorer's Guide,” © 1989 Lotus Development Corporation. |
“Lotus Magellan Product Information Guide,” Circa 1989. |
Pogue, David, Finding Files and Web Sites with Sherlock 2, MAC OS 9: The Missing Manual, Chapter 15, pp. 257-278, Mar. 30, 2000. |
Proximity search (text), Wikipedia, http://en.wikipedia.org/wiki/Proximity_search_%28text%29; Dec. 12, 2006. |
Sherman, Chris, “Enfish Tracker Pro,” © Jan. 1999; printed from http://www.onlinemag.net/OL1999/sherman1.html. |
Shneiderman, B., et al., Clarifying Search: A User-Interface Framework for Test Searches, D-Lib Magazine, Jan. 1997. |
Shokouhi, Milad, and Si, Luo, Foundations and Trends® in Information Retrieval, vol. 5, No. 1 (2011) 1-102 © 2011, DOI: 10.1561/1500000010. |
Stop words, Wikipedia, http://en.wikipedia.org/wiki/Stop_words; Dec. 12, 2006. |
Supplementary Search Report for EP 03794539.1, filed Sep. 3, 2003. |
Number | Date | Country | |
---|---|---|---|
62043295 | Aug 2014 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 14838230 | Aug 2015 | US |
Child | 16375755 | US |