Simple web search

Information

  • Patent Grant
  • 10037383
  • Patent Number
    10,037,383
  • Date Filed
    Wednesday, December 30, 2015
    9 years ago
  • Date Issued
    Tuesday, July 31, 2018
    6 years ago
Abstract
A system of one or more computing devices is utilized for, among other purposes, creating a template-driven search interface and conducting searches thereon. In an embodiment, the system comprises: a template repository; search templates in the template repository, the search templates comprising at least: field specification data that specify search interface fields for obtaining search input data, and query specification data that specify how to generate structured queries based on the search input data obtained for the one or more of the search interface fields; a search field generator that generates search fields indicated by the field specification data; a template loading module, coupled to the template repository, that identifies available search templates in the template repository; and a search interface generator, coupled to the search field generator and template loading module, that generates different search interfaces depending on which template is selected.
Description
TECHNICAL FIELD

The present invention relates to data processing techniques for conducting searches.


BACKGROUND

The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.


A search engine is a system of one or more computing devices, or components thereof, which searches one or more repositories of data for data structures that match search constraints indicated by search requests. One common type of search engine is a web search engine, which conducts searches for data structures such as web pages and other web-based documents, based on keywords and/or other constraints. However, there are many other types of search engines, and these search engines permit searches against a wide variety of repositories of data.


A search user interface, or “search interface” as abbreviated herein, is a point of interaction between an information seeker, or “user,” and one or more search engines. Via the search interface, a user may submit a search request to a search engine. Via the search interface, the user may further receive information concerning one or more data structures, or “search results,” that the search engine has identified as matching the search request. One common type of search interface is a web-based search interface, in which a search engine provides a web browser with a web page comprising controls via which a user may input search request parameters. Once the parameters have been entered, the user's web browser typically sends the parameters to a search engine using a request in a Hyper-Text Transfer Protocol (HTTP) or other suitable web-based protocol. The search engine then returns the search results to the browser.


Creating search interfaces is a task conventionally left to skilled programmers. For example, in the context of web-based search interfaces, creation of search interfaces conventionally requires familiarity with Hyper-Text Markup Language (HTML), JavaScript, and/or other web-based standards or tools. Search interface creation further requires knowledge of search Application Programming Interfaces (APIs), which typically vary from search engine to search engine.


SUMMARY OF THE INVENTION

The appended claims may serve to summarize the invention.





BRIEF DESCRIPTION OF THE DRAWINGS

In the drawings:



FIG. 1 illustrates an example system in which the techniques described herein may be practiced;



FIG. 2 illustrates a process flow for conducting a search;



FIG. 3 illustrates an example template-based graphical user search interface;



FIG. 4 is a block diagram that illustrates a computer system upon which an embodiment of the invention may be implemented.





DETAILED DESCRIPTION

In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention.


1.0. General Overview


According to an embodiment, a system of one or more computing devices is utilized for, among other purposes, creating a template-driven search interface and conducting searches thereon. In an embodiment, the one or more computing devices include or are coupled to: a template repository; search templates stored in the template repository, each of the search templates comprising at least: field specification data that specify search interface fields for obtaining search input data, and query specification data that specify how to generate structured queries based on the search input data obtained for the one or more of the search interface fields; a search field generator that is configured to generate search fields indicated by the field specification data; a template loading module, coupled to the template repository, that is configured to identify one or more available search templates in the template repository; and a search interface generator, coupled to the search field generator and template loading module, that is configured to generate a search interface comprising template selection controls that are configured to select available search templates that are identified by the template loading module. The template loading module is configured to receive template selection input via the template selection controls. The search interface generator is configured to update the search interface to include particular search fields generated by the search field generator for a particular search template selected by the template selection input. The search interface is configured to receive particular search input via the particular search fields, and to cause generation of a particular structured query based on the particular search input and on particular query specification data in the particular search template.


In an embodiment, the search interface generator is configured to generate search interface provisioning instructions which, when executed by a client computing device, cause the client computing device to implement the search interface. In an embodiment, the search interface generator is further configured to send the search interface provisioning instructions to the client computing device. In an embodiment, the search interface generator is further configured to generate particular query formulation logic based on the particular query specification data, wherein the query formulation logic causes the generation of the particular structured query based on the particular search input and particular query specification data in the particular search template. The search interface generator is further configured to send the search interface provisioning instructions, including the particular query formulation logic, to the client computing device. In an embodiment, the search interface provisioning instructions include instructions for generating interface controls by which the particular search input for the particular search fields is received.


In an embodiment, the one or more computing devices comprises a plurality of search adapters that are configured to receive the structured queries, to cause searches to be conducted against a plurality of data sources based on the structured queries, and to return particular search results based on the searches. The search interface is configured to display the returned search results. In an embodiment, at least a first search adapter of the plurality of search adapters is configured to translate the particular structured query into a first query, to send the first query to a particular data source, receive first search results responsive to the first query, and to convert the first search results into a common format of the particular search results. In an embodiment, the particular template comprises data source specification data. The search interface comprises data source selection controls generated based on the data source specification data. The search interface is configured to request performing one or more searches, based on the particular structured query, against one or more particular data sources specified by data source specification input received in association with the data source selection controls.


In an embodiment, the search field generator is configured to analyze an ontology to identify properties of a data structure type specified in the field specification data, and to generate at least a first search field based at least partly upon a particular property of the identified properties. In an embodiment, the search field generator is configured to analyze an ontology to identify properties of a data structure type specified in the field specification data, and generate an interface control for defining a search filter that compares an input value to at least a particular property of the data structure type. In an embodiment, the query specification data specifies query clauses. The query clauses include at least search filter clauses and complex clauses. The search filter clauses include a first search filter clause that specifies how a first search field is compared to data structures when conducting a search. The complex clauses include a first complex clause that specifies a logical relationship between other query clauses.


According to an embodiment, a computer-implemented method comprises receiving a selection of a search template via one or more template selection controls that are configured to select from search templates for formulating searches; responsive to the selection of the search template, presenting search interface fields specified by field specification data within the search template; receiving search input via two or more of the search interface fields, the search input including first input via a first field and second input via a second field; identifying, based on query specification data within the search template, a relationship between the first input and the second input; based on the identified relationship, generating a particular query clause that includes the first input, the second input, and a search directive that indicates the identified relationship between the first input and the second input; based on the search input and the query specification data within the search template, generating a structured query based on the search input, the structured query including the particular query clause; sending the structured query to one or more search modules; and receiving search results responsive to the structured query.


In an embodiment, the method further comprises determining to which of a plurality of search modules to send the structured query based on data source specification data in the search template. In an embodiment, the method further comprises determining to which of a plurality of search modules to send the structured query based at least on third input of the search input, the third input selecting one or more controls corresponding to the one or more search modules. In an embodiment, the search directive is one of: an and directive, an or directive, an adjacent directive, or a within directive. In an embodiment, the query specification data indicates a required value for a particular search filter included in the structured query. In an embodiment, the query specification data specifies that the structured query is to include a search filter that causes the one or more search modules to execute a particular comparison operation between a particular input value for a particular field of the search interface fields and a particular data structure property of data structures that are searched. In an embodiment, the field specification data associates a particular search interface field with a particular data structure type. The method further comprises accessing ontological data to identify properties of the particular data structure type, and presenting, adjacent to the particular search interface field, controls for selecting a particular property to which corresponding input for the field is to be compared.


In an embodiment, the one or more search modules are a plurality of search modules. Each of the plurality of search modules identifies search steps to perform with respect to one or more data sources, based on the structured query. Each of the plurality of search modules generates sets of search results in a common format. The method further comprises aggregating the sets of search results as they are received from the plurality of search modules. In an embodiment, the method further comprises a first search module of the one or more search modules translating the structured query into a first query to send to a first search engine, and a second search module of the one or more search modules translating the structured query into a second query to send to a second search engine. The search results include first search results from the first search engine and second search results from the second search engine. In an embodiment, the method further comprises the first search module converting first search results from the first search engine into a common format and the second search module converting second search results from the second search engine into the common format. The search results include the converted first search results and the converted second search results.


In an embodiment, presenting search interface fields comprises sending search interface creation instructions to a search client. Identifying the relationship, generating the particular query clause, and generating the structured query comprise generating query formulation instructions based on the query specification data and sending the query formulation instructions to the search client.


2.0. Structural Overview


Embodiments provide computing devices, logic, processes and/or software organized in simplified frameworks that are useful for creating search interfaces and conducting searches. In some embodiments, the frameworks provide streamlined syntaxes and grammars for defining one or more elements of a search interface, and for formulating search requests based on inputs received in association with these elements. In some embodiments, the frameworks simplify communications with search engines by providing an intermediary translation level between the search interfaces and the search engines, thereby permitting communication with the search engines via a universal standard. In some embodiments, the frameworks include extensible programmatic interfaces by which new search engine or search interface functions can be added to the system in a modular fashion. In many cases, the frameworks reduce or eliminate the need for an intricate understating of complex coding languages or APIs when defining search interfaces, thereby allowing less-technical users and/or administrators to design and deploy customized search interfaces.



FIG. 1 illustrates an example computing system 100 in which the techniques described herein may be practiced, according to an embodiment. System 100 is a computer-based system. The components of system 100 are implemented at least partially by electronic digital hardware at one or more computing devices, such as one or more hardware processors executing program instructions stored in one or more memories and configured for performing functions described herein.


2.1. Search Server


System 100 comprises a search server 120. Search server 120 is not necessarily a search engine, but rather mediates between search clients 110 and one or more search adapters 140. In an embodiment, search server 120 comprises, among other elements, a template loading module 122, search field generator 124, search interface generator 125, results aggregator 126, and query relay component 129. These elements are described in subsequent sections.


In some embodiments, search server 120 may be a component of one or more server computing devices that are communicatively coupled to one or more client computers at which the search clients 110 are implemented. For example, search server 120 may be a web server, or an application thereof, that communicates over an intranet and/or wide area network with the client devices at which the search clients 110 are deployed. In other embodiments, search server 120 and search clients 110 are implemented at the same computing device. In some embodiments, search server 120 may further be deployed at the same computing device as some or all of search adapters 140 and/or data sources 150. In other embodiments, search server 120 is deployed at a different one or more computing devices than are search adapters 140 and data sources 150.


2.2. Templates


Search server 120 is coupled to one or more data repositories, including a repository 160 of templates 162. Search server 120 comprises a template loading module 122 that accesses and parses templates 162 in repository 160. Repository 160 and templates 162 may be any suitable data structure for storing template data. For example, repository 160 may be a file system, while templates 162 may be files within the file system. As another example, repository 160 may be a database, and templates 162 may be data structures within the database. Each template 162 may be configured to describe a different search interface that may be generated by search server 120. Thus, for example, an administrator may define new search interfaces by creating new templates 162. Templates may be formatted in any suitable coding or markup language. In an embodiment, the templates are structured according to a schema that has a more simplified and/or streamlined syntax than HTML or other common general purpose content presentation languages, to permit creation of templates without requiring the creator to learn such languages.


Templates 162 include field specification data. For example, the field specification data may include an enumerated list of input fields. The field specification data may specify a control type for each field. For example, the field specification data may specify that input for a particular field is to be collected using a specific type of graphical interface control, such as a textbox, text area, checkbox, pull-down list, and so forth. The field specification data may further indicate an order in which the controls are to be presented. The field specification data may further indicate input constraints for some or all of the identified search fields. These constraints may include an expected format or structure, such as a string, integer, date, range of numbers, and so forth. These constraints may further or alternatively specify exactly which options a user may select from, such as in a pull-down list. The field specification data may further specify default input values, search field identifiers, and/or descriptive labels.


Templates 162 may comprise query specification data, which specify how to generate a structured query based on the fields specified in the field specification data. For example, the query specification data may specify logical relationships between certain search field inputs and/or clauses based thereon. These logical operations may include conjunctive operations such as “and,” “adjacent to,” or “within a certain proximity,” or disjunctive operations such as “or.” As another example, the query specification data may specify how one or more search fields are to be compared to data structures when conducting a search. This may be done, for instance, by specifying comparison operations, such as equals, does not equal, greater than, lesser than, and so forth, to be performed between certain search field inputs and the values of certain properties of or metadata for the data structures to be searched. Or, the query specification data may indicate that a search field represents keyword(s) to be searched across all data structure elements. In some embodiments, the query specification data may be entirely separate from the field specification data. In other embodiments, some or all of the query specification data may be intermingled with the field specification data. Since different templates may have different query specification data, different types of search queries may result from two templates 162 even if their field specification data is the same.


Templates 162 may optionally include a data source specification. The data source specification identifies one or more of data sources 150 against which a search may be conducted. In an embodiment, certain data sources may be designated as required or optional.


2.3. Search Field Generator


Template loading module 122 is configured to provide search field generator 124 with the field specification data from a selected one of templates 162. Based at least partly on the field specification data, search field generator 124 identifies search fields that should be included within a search interface. The search field generator 124 then generates these search fields. Generating the search fields may comprise, for instance, generating instructions and/or data structures necessary for a search client 110 to implement search field controls for collecting input for the search fields. For example, for web-based interfaces, generating the search fields may comprise generating HTML and/or JavaScript for displaying one or more field controls within a search form. Generating the search fields for web-based interfaces may further comprise, if necessary, generating JavaScript functions for validating inputs in accordance to any specified constraints.


In an embodiment, the field specification data does not directly specify certain search fields and/or input constraints, but rather indirectly identifies certain search fields and/or input constraints by referencing metadata from an ontology 180. Ontology 180, which is optional, includes metadata that describes types of data structures to which some or all of data sources 150 provide access. Search field generator 124 is configured to utilize this metadata to identify and generate the certain search fields. In an embodiment, for example, the field specification data may specify that a separate search field be generated for each property of a referenced metadata element in ontology 180. Search field generator 124 may automatically identify these properties based on ontology 180, and generate search fields accordingly.


In an embodiment, the field specification data may indicate that the input provided for a certain search field should be subject to constraints imposed on certain predefined metadata elements. For example, the field specification data may reference a specific metadata element to indicate that input for the field be an “age,” “gender,” “state,” or other predefined element of ontology 180. In an embodiment, search field generator 124 may even be configured to access a data source 150 described by the ontology, to determine exactly which specific values or data objects are already found in the data source for the referenced metadata element. The input may then be constrained to these specific values or data objects. The control for the certain search field may even prompt the user to select from the specific values via a pull-down menu, predictive-text textbox, or other suitable mechanism.


2.4. Interface Generator


Search interface generator 125 generates search interfaces based on templates 162, and causes search clients 110 to implement the generated search interfaces. Search interface generator 125 is configured to generate a search interface for a selected template 162 responsive to one or more types of user-initiated instructions, depending on the embodiment. For example, in an embodiment, search interface generator 162 generates a search interface responsive to a user-initiated HTTP or other web-based request from a web browser at a client device. In another embodiment, search interface generator 162 generates a search interface responsive to a local API call from a search application executing on the same computing device as search server 120. The user-initiated request may specify a search template, or a default search template may be selected.


Generating a search interface comprises generating instructions and/or data structures that a computing device may execute to implement the search interface. For example, generating a search interface may comprise generating HTML, JavaScript, and/or other suitable data structures or code that, when interpreted by a web browser, causes a client device to provide the search interface. As another example, generating a search interface may comprise generating SOAP, REST, or other suitable code for instructing a client-based application to provide the search interface. As another example, generating a search interface may comprise generating lower-level code that is directly executable by a computing device for implementing the search interface.


In an embodiment, different versions of a search interface may be generated for different search clients 110 based on the same template. For example, in an embodiment there may be different versions of a search interface targeted to search clients 110 at different web browsers. In an embodiment, there may be different versions of a search interface targeted to any combination of: one or more web browsers, one or more smartphone applications, or one or more desktop applications.


When generating a search interface, search interface generator 125 receives information included in or derived from a selected template from template loading module 122. This information includes at least the query specification data and, if specified by the template, the data source specification. Search interface generator 125 further receives the search fields generated for the selected template from search field generator 124. Based on the query specification data and the data source specification, search interface generator 125 generates query formulator instructions that instruct search clients 110 in constructing and submitting a structured query based on any input received via the search fields. For example, the query formulator instructions may be JavaScript code or other suitable instructions for executing a query formulator 119, as described in other sections.


Search interface generator 125 may further generate other search interface elements, such as a template selector or a presentation of search results, as discussed in other sections. Once all of the search interface elements are generated, search interface generator 125 sends the search interface to a requesting application and/or causes execution of the instructions for providing the search interface. The generated search interface may be, for example, an entire web page or screen window, or the generated interface may be designated portions thereof, such as a search form subsection within a web page.


2.5. Search Client


System 100 may comprise any number of search clients 110. A search client 110 implements the search interfaces generated by search interface generator 125, based on instructions and/or data structures received from search interface generator 125. Search client 110 may comprise, for instance, a generic web browser, a browser plug-in or module, a dedicated search application, or any other suitable tool for executing or interpreting the instructions and/or data structures received from search interface generator 125. Different types of search clients 110 may exist for different platforms or working environments.


Search client 110 comprises a user search interface presentation component 112. In accordance with the instructions and/or data structures received from search interface generator 125, presentation component 112 is configured to provide, or cause the provision of, a presentation of one or more textual and/or graphical elements at one or more output components, such as a computer monitor or touchscreen device. The presented textual or graphical elements include textual and/or graphical controls, such as text boxes, check boxes, buttons, and/or other graphical user interface components. Among other controls, the textual and graphical controls include template selection controls 114 and search field controls 115.


Template selection controls 114 visually guide the user in providing inputs for selecting one of templates 162. For example, the template selection controls 114 may be a pull-down list of each template 162 in repository 160. Or, the template selection controls 114 may be a pull-down list of each template 162 in repository 160 to which a user has access, as indicated by user permission data associated with templates 162 and/or data sources 150. Input selecting a specific template triggers an instruction to the search interface generator 125 to generate a new search interface based on the selected template, which results in presentation component 112 displaying a different set of textual and/or graphical elements.


Search field controls 115 visually guide the user in providing inputs for interfacing with the one or more search engines. The search field controls 115 may include a different control for some or all of the search fields identified by search field generator 124. Certain fields may be hidden from the user. These hidden fields specify search filters that should always be applied when performing a search under a corresponding search template. For example, an interface designer may wish for a certain search interface to be restricted to only certain types of data structures within a data source, or to only data structures that have a certain property value.


The presented textual or graphical elements may further include a presentation of search results 116, as described in other sections.


2.6. Collecting Input


Search client 110 further comprises an input processor 118. Input processor 118 is configured to receive inputs for fields associated with the textual and/or graphical controls presented by the presentation component 112. The inputs may be, for example, signals from one or more user-operated input devices, interpretations of these signals based on knowledge of how the textual or graphical controls are arranged, and/or derivations thereof. For example, input processor 118 may be configured to detect when a new template has been selected using template selection controls 114, and relay corresponding instructions to template loading module 122.


As another example, input processor 118 may receive inputs that specify keywords, filters, or other search parameters in association with search field controls 115. Input processor 118 is further configured to detect input instructing search client 110 to submit a search. This input may be provided in association with a “submit” control of search field controls 115. Or, certain interactions with designated search fields, such as pressing an “Enter” key while a keyword box is selected, may be interpreted as an instruction to submit a search. In an embodiment, a new search is requested any time new input is provided via search field controls 115.


2.7. Query Formulation


Input processor 118 provides the values that were input for each of search fields 115 to a query formulator 119 that corresponds to the currently selected template 162. Query formulator 119 is a set of one or more processes that generate a structured query 130 based on the inputted values, in accordance with the query formulator instructions received from search interface generator 125. Query formulator 119 may comprise, for instance, HTML form processing logic, JavaScript functions, and/or other suitable processing logic.


The structured query 130 may take a variety of forms, depending on the embodiment. For example, in an embodiment, the structured query may be a series of name-value pairs embedded within an HTTP query string or a JSON object. In an embodiment, the structured query may comprise groups of input values associated with search directives. The search directives specify relationships between the input values in a group.


In another embodiment, structured query 130 may be a hierarchical data structure comprised of clauses, in which the hierarchical relationships of the clauses reflect logical relationships between the clauses. The clauses include search filter clauses and complex clauses. Search filter clauses are generally based upon data input in association with search field controls 115, and/or data associated with hidden search fields. While query formulator 119 will often only produce one search filter clause per search field, the query formulation instructions may in some cases cause query formulator 119 to create two or more search filter clauses for a single search field. Search filter clauses may specify, without limitation, keyword input for a particular search field, a name-value pair resulting from input for a particular search field, a comparison operation between the input data of a particular search field and one or more data structures designated by the query formulation instructions, and so forth. Complex clauses comprise a search directive that specifies a conjunctive, disjunctive, or other logical relationship between two or more search filter clauses and/or other complex clauses.


2.8. Query Relay Component


Search client 110 is configured to send the structured query 130, once constructed by query formulator 119, to a query relay component 129 of search server 120. The query relay component 129 is configured to send the structured query 130 in turn to one or more search adapters 140. In an embodiment, the structured query 130 is sent to at least some of the search adapters 140 in parallel, thus potentially resulting in returning search results from two or more search adapters 140 at the same time. In an embodiment, the structured query 130 is sent serially to some or all of the search adapters 140, in that the query relay component 129 must wait for an indication that a first search adapter 140 has concluded a search before sending the structured query 130 to a second search adapter 140.


In an embodiment, the one or more search adapters 140 to which query relay component 129 sends structured query 130 is the set of all available search adapters 140. In other embodiments, the one or more search adapters 140 to which query relay component 129 sends structured query 130 are selected by data source specification data in a template 162 and/or selected by a user via controls in search client 110. One or more search adapters 140 thus selected may be identified to query relay component 129 in, for example, the structured query 130, such as in a search filter clause or in separate data source specification data. Or query relay component 129 may determine the selected one or more search adapters 140 based on metadata associated with the structured query 130, such as interface state data or session data. The selected one or more search adapters 140 may be designated directly, or by reference to a particular data source 150, depending on the embodiment.


The one or more search adapters 140 may further be implicit from one or more search parameters described in structured query 130. For example, the query relay component 129 may be configured to access ontology 180 and determine that a certain data structure type specified in the search parameters is only available in a certain data source 150 to which only a particular search adapter 140 has access. Thus, the structured query 130 is only sent to the particular search adapter 140.


In an embodiment, each of the search adapters 140 is configured to understand a common query structure. The same single structured query 130 may thus be sent to each search adapter 140, thus avoiding the need for any given search interface to have multiple query formulators in the search client 110 or search server 120.


2.9. Search Adapters


System 100 further comprises one or more search adapters 140. Each search adapter 140 searches one or more data sources 150, or causes the one or more data sources 150 to be searched. In some embodiments, search adapters 140 function as substitutes for search engines, directly conducting searches specified by structured query 130 on data sources 150 such as databases and/or file repositories. Each search adapter 140 directly generates a set of search results. This set of search results identifies data structures, in the one or more data sources 150 to which the search adapter 140 provides access, that match the parameters specified by structured query 130. The search adapter 140 provides this set of search results to results aggregator 126 of search server 120.


In other embodiments, search adapters 140 function as query translators. In these embodiments, data sources 150 are themselves search engines, each exposing a potentially different search API. Thus, search adapters 140 reconstruct the structured query 130 as a separate query for each different data source 150 to which the search adapter 140 provides access. Each separate query conforms to a potentially different syntax and grammar, corresponding to the search API of the data source 150 to which the query is targeted. Each search adapter 140 receives one or more sets of search results from the one or more data sources 150 to which the search adapter 140 provides access. The search adapter 140 converts these sets of search results into a universal search result format, and then provides a converted set of search results to results aggregator 126 of search server 120.


In some embodiments, both types of search adapters 140 may exist.


A search adapter 140 may be configured to pre-process a query and/or post-process search results using one or more rules. For example, a search adapter 140 may be configured to add additional filters or constraints to a structured query, and/or to a translated query. As another example, search adapter 140 may be configured to normalize or aggregate search results, or properties thereof. As another example, search adapter 140 may be configured to remove duplicate search results, or apply its own ranking and/or sorting logic to the search results. In an embodiment, different search adapters 140 may provide access to the same data source 150, but differ with respect to how the search adapters 140 pre-process a query or post-process search results.


In an embodiment, a search adapter 140 iteratively identifies sets of search results. For example, the search adapter 140 may initially return a first set of results that were identified most quickly, and then return additional sets of results as they are identified.


2.10. Results Aggregator


Results aggregator 126 receives sets of search results from search adapters 140. Search results may comprise actual matching data structures from data sources 150, and/or metadata describing matching data structures. In an embodiment, search adapters 140 convert or generate each search result in each set using a common search result format. For example, each search result may be a JSON object or other data structure that conforms to a common schema. As another example, each search result may be a data object identifier. However, the actual data structures represented by the search results may conform to one or many different formats, depending on the search parameters.


Results aggregator 126 may combine and/or arrange the search results from the one or more sets using any of a variety of techniques. In an embodiment, the search results are concatenated together into a single list as they are received. In another embodiment, the search results are sorted according to any of a variety of techniques, such as in numerical or alphabetical order based on a common property of the data structures that the results represent, or based on relevance metadata provided by search adapters 140. Results aggregator 126 may further post-process the search results, by for example removing duplicates, normalizing metadata within the search results, adding additional metadata, and so forth.


2.11. Presentation of Results


In the depicted embodiment, results aggregator 126 provides the aggregated search results to the search interface generator 125. Search interface generator 125 sends instructions and/or data structures to search client 110 that cause the search client to display presentations 116 of the search results. The presentations 116 of the search result may be arranged in any fashion, and may include any suitable information representative of the data structures from data sources 150 to which the search results correspond. For example, the presentations 116 of the search results may include, without limitation, one or more of: titles, names, thumbnails, maps, addresses, descriptions, or links by which actual contents of the data structure may be viewed and/or edited. In an embodiment, the information presented in presentations 116 of the search results is limited to information that was actually returned in the search results. In other embodiments, search interface generator 125 may retrieve additional information concerning certain data structures represented by certain search results directly from data sources 150. Search interface generator 125 may use any of a variety of logic to determine how best to present a given search result. For example, certain types of data structures may have predefined view templates that indicate how those structures are to be presented within a search interface.


In an embodiment, the search results are presented as a scrollable list or tile grid. In an embodiment, one or more alternate views of the search results may be available, such as map views, node-based graphs, charts of aggregated values from the search results, or other suitable data visualizations. Search client 110 may include controls for switching between views. Search interface generator 125 may also or instead be configured to identify suitable data visualizations based on search result view data in templates 162 and/or an analysis of the data structures represented by the search results.


Depending on the embodiment, search interface generator 125 may wait to send instructions to update a search interface with new search results until after search results aggregator 126 signals that all search results have been received. Or, search interface generator 125 may continually send instructions to update the search interface as results aggregator 126 continues to receive search results from the search adapters 140. In an embodiment, search interface generator 125 need not instruct search client 110 to update the entire interface, but rather instructs the search client to update a search results section.


2.12. Configuration Component


In an embodiment, system 100 optionally comprises a configuration component 190. Configuration component 190 may be as simple as a set of one or more configuration files, or the configuration component may be an actual software application. Configuration component 190 allows users and/or administrators to register the locations of one or more resources; for example, administrators may register locations of templates 162, template repository 160, search adapters 140, and/or data sources 150. Search server 120 is configured to access configuration component 190 when looking for these resources. Thus, administrators may quickly add new functions to search server 120 by registering new resources with configuration component 190.


2.13. Extensions and Variations


System 100 as shown in FIG. 1 illustrates only one of many possible arrangements of components configured to perform the functions described herein. Other arrangements may include fewer or different components, and the division of work between the components may vary depending on the arrangement.


For example, in an embodiment, results aggregator 126 or search adapters 140 may provide search results directly to the search client 110. In such embodiments, search client 110 may include or have received instructions that would cause search client 110 to aggregate search results and/or generate presentations 116 of the search results using similar techniques to those described with respect to the results aggregator 126 and search interface generator 125. The instructions may be general, or specific to a certain search template. In an embodiment, there is no aggregation of results, and the results are instead displayed separately by data source 150. Such embodiments need not necessarily require search adapters 140 to create search results in a common format. In an embodiment, results aggregator 126 may be responsible for converting search results to a common format.


In an embodiment, query formulator 119 may be deployed at the search server 120 as opposed to the search client 110. The search client 110 sends the input values directly to the search server 120. The search server 120 determines which query formulator 119 to execute based on session data indicating which search template is used by the search client 110 from which the input values are received. In an embodiment, there is no query relay 129, and search client 110 is configured to send structure query 130 directly to each selected search adapter 140.


3.0. Functional Overview



FIG. 2 illustrates a process flow 200 for conducting a search. Flow 200 is but one example technique for conducting a search. Other flows may include fewer or additional elements in varying arrangements.


In an embodiment, each of the processes described in connection with the functional blocks of FIG. 2 may be implemented using one or more computer programs, other software elements, and/or digital logic in any of a general-purpose computer or a special-purpose computer, while performing data retrieval, transformation and storage operations that involve interacting with and transforming the physical state of memory of the computer. In one embodiment, flow 200 is performed by a computer system comprising, among other elements, a search client and a search server such as search client 110 and search server 120, as described in the previous section. For purposes of illustrating a clear example, the search server and search client may be described as separate and distinct components implemented by different computing devices; in other embodiments, the search server and search client may be components of a same application executing at the same computing device(s).


Block 205 comprises identifying a plurality of available search templates, for example, the search templates that have been described in the preceding sections. The identifying may comprise one or more of: accessing configuration data that specifies template locations, scanning for template files or other template structures, parsing template structures to locate template identifiers, checking user permission data with respect to the templates and/or the data sources accessed by the templates, and so forth. In an embodiment, block 205 may further comprise presenting controls to a user for selecting one of these identified search templates. However, performing such a step is not necessary in other embodiments.


Block 210 comprises receiving a selection of a particular search template from the plurality of search templates. The selection may be received via interface controls such as template selection controls 114, or the selection may be received programmatically via application logic. Receiving the selection may comprise one or more of: a search client directly receiving user input, a search server receiving an HTTP or other suitable web request, a search application receiving an API call, or a search client/server receiving any other suitable input.


Block 215 comprises, responsive to the selection of the particular search template, presenting search interface fields specified by field specification data within the selected search template, such as described in other sections. Block 215 may be performed, for instance, by creating a web page comprising a search form that includes field controls corresponding to the search interface fields, and then sending the web page to a web browser. As another example, block 215 may be performed by sending the field specification data to a standalone smartphone or desktop application that is configured to create graphical interface controls based thereon.


Block 220 comprises receiving search input for the search interface fields. The search input may comprise user-entered text and/or other user selected values, along with an indication of the search field(s) to which the input corresponds. Any suitable user input technique may be utilized in receiving the search input. Block 220 may comprise, for instance, a search client receiving input directly from a keyboard, mouse, and/or other suitable input device, and interpreting the intent of that input based on the depicted search field controls. Block 220 may further comprise, in some embodiments, a search server receiving a description of the search input from the search client.


Block 225 comprises generating one or more query clauses based on the search input, and further based on query specification data within the selected search template, as described in other sections. Block 225 may be performed, for instance, by a search client or a search server directly accessing the query specification data, and using the query specification data to determine how to generate the query clauses. In an embodiment, block 225 is performed at a search client by a query formulation component that was generated by the search server based on the query specification data in the selected search template.


The query specification data may specify, for instance, to generate keyword clause(s) based on search input corresponding to one or more keyword fields. The query specification data may further specify, for instance, to create comparison clause(s) based on search input for one or more fields associated with specific data structure properties. In an embodiment, the query specification data may specify to generate a clause that defines a relationship between a first input of the search input and a second input of the search input. The clause includes a search directive indicating the relationship. For example, the search directive may indicate that a search result must satisfy all of, at least one of, or only one of the search parameters corresponding to the first input and the second input. Or the search directive may indicate that a search result must satisfy the search parameters within a certain context, such as in adjacent or nearby terms within a same data structure property.


Block 225 may further comprise creating complex query clauses based on other query clauses, as described in other sections.


Block 230 comprises generating a structured query based on the generated query clauses and the query specification data. The structured query may be any data structure capable of describing all of the clauses, such as a JSON object.


Block 235 comprises sending the structured query to one or more search modules, such as the search adapters described in other sections and/or search engines. The search modules may be co-located with the search client and/or search server, or may be executed by one or more different computing devices. Block 235 may comprise a search client or search server sending the structured query directly to the one or more search modules. In an embodiment, block 235 may further comprise a search client sending the structured query to a search server so that the search server may send the structured query to the one or more search modules. In an embodiment, the same structured query is sent to a plurality of search modules. Block 235 may optionally comprise identifying the one or more search modules based on the selected template and/or based on data source selection input, such as described in other sections.


Block 240 comprises, based on the structured query, the one or more search modules identifying search steps to take with respect to one or more data sources. For a first type of search module, block 240 may comprise generating SQL statements, query execution plans, or other such steps that implement a process of directly searching a data repository for data structures that match the search parameters described in the structured query. For a second type of search module, whose data source(s) are search engines as opposed to other data repositories, block 240 comprises translating the structured query into a data source-specific query string or other message. The exact steps taken for a particular structured query may vary, including for search modules of the same type, depending on the data source to which a search module provides access. Both the first type of search module and the second type of search module may co-exist within certain embodiments.


Block 245 comprises the one or more search modules causing searches of the one or more data sources using the search steps. For the first type of search module, block 245 comprises actually executing the SQL statements, query execution plan, or other such steps. For the second type of search module, block 245 comprises sending the translated query to a search engine.


Block 250 comprises the one or more search modules identifying or receiving search results for the searches. The search results are, or describe, data structures within the searched data sources that match the search parameters defined by the clauses of the structured query. The first type of search module identifies the search results directly, while the second type of search module receives the search results from another search engine.


Block 255 comprises the one or more search modules structuring the search results using a common format expected by the search server and/or search client. Block 255 may be optional for some or all search modules, in that the search results received or identified by certain search modules may already be in the common format. In an embodiment, a search interface is configured to understand all possible search results that could be created by the one or more search modules, and thus block 255 is not needed even if the search results for different search modules are structured differently. Block 255 may also optionally comprise post-processing of search results.


Block 260 comprises the search server and/or search client receiving the search results from the one or more search modules. For example, block 260 may comprise the one or more search modules sending sets of search result data objects to the search server and/or the search client.


Block 265 comprises presenting the search results at the search client. For example, block 265 may comprise a search server generating HTML, JavaScript, or other suitable instructions for presenting the search results. The search server sends these instructions to a web browser at the client, which then presents the search results based thereon. As another example, block 265 may comprise the search client itself generating views of the search results returned by the one or more search adapters. For example, the search client may be an application that includes search result presentation logic. In an embodiment, block 265 comprises aggregating the search results together. However, in other embodiments, search results may be presented in separate sections. In an embodiment, block 265 is performed at least partially concurrent to blocks 250-260, in that searches may continue to run in the background as initial search results are published.


4.0. Example Search Interface



FIG. 3 illustrates an example template-based graphical user search interface 300, according to an embodiment. Search interface 300 is one example of a search interface that may be generated using the techniques described herein and in other embodiments, search interfaces may comprise fewer or additional elements, in potentially varying arrangements.


Search interface 300 comprises a search form 310, including a template selector 315, search field area 320, and data source selection area 330. Template selector 315 names the current search template, and allows users to select a new template from a list of templates by selecting the pull-down menu control 316. Selecting a new template may result in changes to search field area 320 and data source selection area 330, depending on the search fields and/or data sources specified by the new template.


Search field area 320 comprises search field controls 321-325, each of which corresponds to a different search field identified by the currently selected template. Each of controls 321-325 includes a label to provide information to a user concerning the search field to which the respective control 321-325 corresponds. A user may specify input for a search field by entering input via a corresponding search field control 321-325. Controls 321-323 are text boxes. In some embodiments, typing into these text boxes may bring up a list of suggestions, derived from previous input associated with the template, previous input associated with similar search fields in other templates, and/or existing data within the data structure properties with which the corresponding property is to be compared. A search server or search client may be configured to automatically track such data and generate such suggestions without the suggestions having been specified in the selected template.


Control 324 may comprise a textbox that features a comparison operator selector 328. Comparison operator selector 328 is a pull-down menu that allows a user to select between comparison operators in order to specify how the inputted value of control 324 is to be compared to the values of the data structure property to which the corresponding search field is to be compared. Control 325 is a multi-value selector. Users may select multiple values by typing the values directly and/or using a pull-down menu populated with a list of values. Each selected value will be depicted with a selected value indicator 329.


Data source selection area 330 comprises data source filter controls 331-333. Each data source filter control 331-333 corresponds to a different data source specified by the selected template, as indicated by the labels in filter controls 331-333. A user may tap or click on a control 331-333 to toggle between selecting the corresponding data source and unselecting the corresponding data source. In an embodiment, a search is only submitted for selected data sources. In another embodiment, a search is submitted for all data sources, but only search results for selected data sources are shown.


Each control 331-333 includes a status indicator 335-337 that indicates, by color or other suitable indication, whether the corresponding control 331-333 is currently selected. If a search has already been submitted, status indicators 335-337 may furthermore provide information about the data sources with respect to the search. For example, status indicators 335-337 may turn a different color or show a special graphical indicator while search results are being retrieved from a data source. Also, as depicted, status indicators 335-337 may provide an indication of a number of search results returned from a corresponding data source, and/or an indication of the quality thereof.


Search form 310 further comprises a clear control 311. User selection of clear control 311 resets all controls 321-325 and 331-333 to their default input values. Search form 310 further comprises a submit control 312. User selection of submit control 312 indicates to search interface 300 that the user has finished specifying search parameters, and wishes to retrieve search results. Both controls 311-312 are optional, depending on the environment. For example, in some embodiments, selection of a data source selection control 331-333 indicates to the search interface that the search should be sent to the corresponding data source. In other embodiments, a search is sent any time the user provides input into search form 310. Thus, for instance, the user may perceive search interface 300 as returning search results while the user is still typing in a text box 321-333.


Search interface 300 further comprises a search result area 340. Search result area 340 is a scrollable list of search results, including search results 341 and 342. Search result area 340 is initially blank, but then filled with views of search results after a search has been performed. Each search result is presented as a rectangular area within the scrollable list, and may include summary information about the data structure corresponding to the search result, such as a thumbnail, name, description, and/or other selected information. The exact information presented for each search result may vary depending on the type and/or contents of the data structure to which a search result corresponds.


In some embodiments, sets of search results are retrieved iteratively from each data source. For example, a search adapter may be configured to return a first set of high-quality or easy-to-locate search results before returning other search results. If necessary, the search adapter may continue to search for additional results even after returning the first set. In an embodiment, search result area 340 is updated to include these additional results as found. In another embodiment, the search interface must explicitly request that the search adapter continue searching and/or return the additional results. Thus, as depicted in FIG. 3, search result area 340 further includes a control 349 for retrieving additional results. The process may be repeated for any number of iterations.


Search interface 300 further includes an optional detail view area 350 that displays more information about a selected search result 342. Depending on the embodiment, the detail view area 350 may include additional information from the data structure corresponding to search result 342, including information not initially returned with the search results. For example, clicking on 342 may cause a search interface generator to perform one or more queries with respect to the corresponding data structure in order to populate a detail view template for the data structure.


In some embodiments, search results 341-342 and/or detail view area 350 may further include controls for performing actions with respect to a corresponding data structure, such as viewing or editing the complete data structure, printing the detail view, generating a data visualization based on the corresponding data structure, and so forth. Also, multiple search results may be selected from search result area 340, and one or more controls may allow for one or more actions with respect to these multiple search results. Search interface 300 may further include additional views derived from the search results, such as maps or graphs.


5.0. Example Data Structures


5.1. Example Template


According to an embodiment, a template is a data object, such as a JSON object, comprising: a URI field specifying a private identifier for the template; a name field specifying the name of the template, as seen by a user; an optional description field comprising additional information about the template; multiple field objects; an optional query object; and an optional data source object. A field object, in turn, comprises: a URI specifying a private identifier for the field; an input type, which specifies the type of input control used to collect input for the field object; a name, corresponding to the name displayed in the label for the input control; an optional default value; an optional data type; and/or an optional comparison operator. A data source object comprises a list of data sources and/or search adapters targeted by the template.


A query object comprises one or more clause objects. Example clause object types include, without limitation: an AND clause for specifying a conjunction between two or more other clauses, an OR clause for specifying a disjunction between two or more other clauses, an ObjectType clause for specifying a type of object to filter the search upon, a Keyword clause for specifying one or more keywords to filter the search upon, or a Property clause for specifying comparison operations between an input value and a particular data structure property. Each of the ObjectType, Keyword, and Property clauses includes a data field that specifies either the URI of a field object from which to retrieve input, or hard-coded data for “hidden” search parameters.


TABLE 1 illustrates an example template for generating the search interface 300 of FIG. 3, in accordance with the above-described embodiment









TABLE 1





EXAMPLE TEMPLATE

















{



 “uri”:“pt.template.person”,



 “name”: “Person Search”,



 “fields”: [



  {



   “uri”:“LastName”,



   “display”:“Last Name”,



   “inputType”:“property”,



   “data”: {



    “typeUri”:“com.palantir.property.Name”,



    “componentUri”:“LAST_NAME”,



    “operator”: “=”,



   }



  },



  {



   “uri”:“FirstName”,



   “display”:“First Name”,



   “inputType”:“property”,



   “data”: {



    “typeUri”:“com.palantir.property.Name”,



    “componentUri”:“FIRST_NAME”,



    “operator”: “=”,



   }



  },



  {



   “uri”:“MiddleName”,



   “display”:“Middle Name (or Initial)”,



   “inputType”:“property”,



   “data”: {



    “typeUri”:“com.palantir.property.Name”,



    “componentUri”:“MIDDLE_NAME”,



    “operator”: “=”,



   }



  },



  {



   “uri”:“age”,



   “display”:“Age”,



   “inputType”:“property”,



   “data”: {



    “typeUri”:“com.palantir.property.Age”,



   }



  },



  {



   “uri”:“Gender”,



   “display”:“Gender”,



   “inputType”:“property”,



   “data”: {



    “typeUri”:“com.palantir.property.Gender”,



    “operator”: “=”,



   }



  },



 ],



 “query”:{



  “type”:“AND”,



  “clauses”:[



   {



    “type”:“Property”,



    “value-uri”:“LastName”



   },



   {



    “type”:“Property”,



    “value-uri”:“FirstName”



   },



   {



    “type”:“Property”,



    “value-uri”:“MiddleName”



   },



   {



    “type”:“Property”,



    “value-uri”:“age”



   },



   {



    “type”:“Property”,



    “value-uri”:“Gender”



   },



   {



    “type”: “OR”,



    “clauses”: [



     {



      “type”:“ObjectType”,



      “data”: {



       “value”:“com.palantir.object.Person”



      }



     },



     {



      “type”:“ObjectType”,



      “data”: {



       “value”:“com.palantir.object.Entity”



      }



     },



    ]



   },



  ]



 },



 “dataSources”: [



  “pt.data.palantir.structured”,



  “pt.data.people”,



  “pt.data.test3”,



 ]



}










The above template specification is given by way of example. In other embodiments, templates may be structured in any number of suitable manners.


5.2. Example Structured Query


According to an embodiment, TABLE 2 illustrates an example structured query generated based on the above example template:









TABLE 2





EXAMPLE STRUCTURED QUERY

















{



 “type”:“AND”,



 “clauses”: [



  {



   “value-uri”:“LastName”,



   “data”: {



    “componentUri”:“LAST_NAME”,



    “typeUri”:“com.palantir.property.Name”,



    “value”:“”,



    “operator”:“=”



   },



   “userEntered”:true,



   “type”:“Property”



  },



  {



   “value-uri”:“FirstName”,



   “data”: {



    “componentUri”:“FIRST_NAME”,



    “typeUri”:“com.palantir.property.Name”,



    “value”:“brian”,



    “operator”:“=”



   },



   “userEntered”:true,



   “type”:“Property”



  },



  {



   “value-uri”:“MiddleName”,



   “data”: {



    “componentUri”:“MIDDLE_NAME”,



    “typeUri”:“com.palantir.property.Name”,



    “value”:“”,



    “operator”:“=”



   },



   “userEntered”:true,



   “type”:“Property”



  },



  {



   “value-uri”:“age”,



   “data”: {



    “typeUri”:“com.palantir.property.Age”,



    “value”:“40”,



    “operator”:“<”



   },



   “userEntered”:true,



   “type”:“Property”



  },



  { “value-uri”:“Gender”,



   “data”: { “typeUri”:“com.palantir.property.Gender”,



    “value”:[“”,“MALE”],



    “operator”:“=”



   },



   “userEntered”:true,



   “type”:“Property”



  },



  {



   “type”:“OR”,



   “clauses”: [



    {



     “data”: {



        “value”:“com.palantir.object.Person”



     },



     “type”:“ObjectType”



    },



    {



     “data”: {



        “value”:“com.palantir.object.Entity”



     },



     “type”:“ObjectType”



    }



   ]



  }



 ]



}










The above structured query definition is given by way of example. In other embodiments, queries may be structured in any number of suitable manners.


5.3. Example Search Result


TABLE 3 illustrates an example search result returned from a search adapter:









TABLE 3





EXAMPLE SEARCH RESULT

















{



   “id”: “pt.data.palantir.structured:887340230857982198”,



   “simpleId”: “887340230857982198”,



   “title”: “Brian D”,



   “hasThumbnail”: true,



   “description”: “Person”,



   “dsName”: “Palantir Search”,



   “dsUri”: “pt.data.palantir.structured”



}










The example search result is used in an embodiment where generating a presentation of the search result comprises looking up additional information about the data structure referenced by the search result. In other embodiments, search results may be structured in any number of suitable manners. For example, a search result may include all information necessary to generate a presentation for the search result, such as a title, description, thumbnail link, and so forth.


6.0. Example Extensibility Features


In embodiments, new templates and/or search adapters may be made available to a search server and search client via a registration process at the search server. For example, each template and/or search adapter may be contained in a separate file. In an embodiment, the template and/or search adapter may be registered by placing the file within a certain directory on the search server. In other embodiments, the template and/or search adapter may be registered by adding the location of the file to a path statement in a configuration file that specifies templates. The search server may access this configuration file or directory to identify which templates and/or search adapters are available.


In an embodiment, each search adapter implements the same API. For example, each search adapter may be based on a coded object that inherits features and functions from a common coded object. In an embodiment, each search adapter implements a common set of API function calls, including some or all of: a function call for retrieving identifier(s) of data source(s) to which the search adapters provide access, a function call for receiving a structured query, a function call for converting the structured query API into a string-based query that conforms with the data source(s), a function for initiating a search, a function for returning a complete set of search results, or a function for returning an iterative set of search results.


7.0. Hardware Overview


According to one embodiment, the techniques described herein are implemented by one or more special-purpose computing devices. The special-purpose computing devices may be hard-wired to perform the techniques, or may include digital electronic devices such as one or more application-specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs) that are persistently programmed to perform the techniques, or may include one or more general purpose hardware processors programmed to perform the techniques pursuant to program instructions in firmware, memory, other storage, or a combination. Such special-purpose computing devices may also combine custom hard-wired logic, ASICs, or FPGAs with custom programming to accomplish the techniques. The special-purpose computing devices may be desktop computer systems, portable computer systems, handheld devices, networking devices or any other device that incorporates hard-wired and/or program logic to implement the techniques.


For example, FIG. 4 is a block diagram that illustrates a computer system 400 upon which an embodiment of the invention may be implemented. Computer system 400 includes a bus 402 or other communication mechanism for communicating information, and a hardware processor 404 coupled with bus 402 for processing information. Hardware processor 404 may be, for example, a general purpose microprocessor.


Computer system 400 also includes a main memory 406, such as a random access memory (RAM) or other dynamic storage device, coupled to bus 402 for storing information and instructions to be executed by processor 404. Main memory 406 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 404. Such instructions, when stored in non-transitory storage media accessible to processor 404, render computer system 400 into a special-purpose machine that is customized to perform the operations specified in the instructions.


Computer system 400 further includes a read only memory (ROM) 408 or other static storage device coupled to bus 402 for storing static information and instructions for processor 404. A storage device 410, such as a magnetic disk or optical disk, is provided and coupled to bus 402 for storing information and instructions.


Computer system 400 may be coupled via bus 402 to a display 412, such as a cathode ray tube (CRT), for displaying information to a computer user. An input device 414, including alphanumeric and other keys, is coupled to bus 402 for communicating information and command selections to processor 404. Another type of user input device is cursor control 416, such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor 404 and for controlling cursor movement on display 412. This input device typically has two degrees of freedom in two axes, a first axis (for example, x) and a second axis (for example, y), that allows the device to specify positions in a plane.


Computer system 400 may implement the techniques described herein using customized hard-wired logic, one or more ASICs or FPGAs, firmware and/or program logic which in combination with the computer system causes or programs computer system 400 to be a special-purpose machine. According to one embodiment, the techniques herein are performed by computer system 400 in response to processor 404 executing one or more sequences of one or more instructions contained in main memory 406. Such instructions may be read into main memory 406 from another storage medium, such as storage device 410. Execution of the sequences of instructions contained in main memory 406 causes processor 404 to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions.


The term “storage media” as used herein refers to any non-transitory media that store data and/or instructions that cause a machine to operation in a specific fashion. Such storage media may comprise non-volatile media and/or volatile media. Non-volatile media includes, for example, optical or magnetic disks, such as storage device 410. Volatile media includes dynamic memory, such as main memory 406. Common forms of storage media include, for example, a floppy disk, a flexible disk, hard disk, solid state drive, magnetic tape, or any other magnetic data storage medium, a CD-ROM, any other optical data storage medium, any physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, NVRAM, any other memory chip or cartridge.


Storage media is distinct from but may be used in conjunction with transmission media. Transmission media participates in transferring information between storage media. For example, transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus 402. Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications.


One or more forms of media may be involved in carrying one or more sequences of one or more instructions to processor 404 for execution. For example, the instructions may initially be carried on a magnetic disk or solid state drive of a remote computer. The remote computer can load the instructions into its dynamic memory and send the instructions over a telephone line using a modem. A modem local to computer system 400 can receive the data on the telephone line and use an infra-red transmitter to convert the data to an infra-red signal. An infra-red detector can receive the data carried in the infra-red signal and appropriate circuitry can place the data on bus 402. Bus 402 carries the data to main memory 406, from which processor 404 retrieves and executes the instructions. The instructions received by main memory 406 may optionally be stored on storage device 410 either before or after execution by processor 404.


Computer system 400 also includes a communication interface 418 coupled to bus 402. Communication interface 418 provides a two-way data communication coupling to a network link 420 that is connected to a local network 422. For example, communication interface 418 may be an integrated services digital network (ISDN) card, cable modem, satellite modem, or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, communication interface 418 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN. Wireless links may also be implemented. In any such implementation, communication interface 418 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing one or more types of information.


Network link 420 typically provides data communication through one or more networks to other data devices. For example, network link 420 may provide a connection through local network 422 to a host computer 424 or to data equipment operated by an Internet Service Provider (ISP) 426. ISP 426 in turn provides data communication services through the world wide packet data communication network now commonly referred to as the “Internet” 428. Local network 422 and Internet 428 both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the one or more networks and the signals on network link 420 and through communication interface 418, which carry the digital data to and from computer system 400, are example forms of transmission media.


Computer system 400 can send messages and receive data, including program code, through the network(s), network link 420 and communication interface 418. In the Internet example, a server 430 might transmit a requested code for an application program through Internet 428, ISP 426, local network 422 and communication interface 418.


The received code may be executed by processor 404 as it is received, and/or stored in storage device 410, or other non-volatile storage for later execution.


In the foregoing specification, embodiments of the invention have been described with reference to numerous specific details that may vary from implementation to implementation. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. The sole and exclusive indicator of the scope of the invention, and what is intended by the applicants to be the scope of the invention, is the literal and equivalent scope of the set of claims that issue from this application, in the specific form in which such claims issue, including any subsequent correction.

Claims
  • 1. A system comprising: one or more processors;a server configured to receive, from a client, a selection of a particular template of a plurality of templates, each template comprising a plurality of properties;a field generator, in the server, configured to analyze the plurality of properties specified in a selected template to create a control for selecting a property of the plurality of properties; anda graphic user interface generator, coupled to the field generator, configured to create a form that comprises a field and the control for selecting the property to which corresponding input in the field is to be compared, and further configured to send, from the server to the client, the form;wherein search input received via the form comprises a particular property of the plurality of properties and a corresponding particular input which is to be compared against values corresponding to the particular property in one or more data structures of one or more data sources.
  • 2. The system of claim 1, wherein the particular template further specifies a comparison operation between the corresponding particular input and the values corresponding to the particular property in the one or more data structures or metadata for the one or more data structures to be searched in the one or more data sources.
  • 3. The system of claim 2, wherein the particular template further comprises query specification data that is used by a query formulator to generate a structured query comprising a first clause that specifies how the corresponding particular input is compared to the one or more data structures when conducting a search.
  • 4. The system of claim 3, further comprising: one or more search adapters, in the server, configure to translate the structured query into respective data source-specific query strings for the one or more data sources.
  • 5. The system of claim 3, wherein the structured query further comprises: a particular search filter with a required value indicated by the query specification data.
  • 6. The system of claim 1, wherein: said field is a first field;the field generator is further configured to create the first field and a second field;wherein the particular template further specifies how the search input in the first field and the second field is compared to the one or more data structures in the one or more data sources.
  • 7. The system of claim 6, wherein the particular template further comprises query specification data that is used by a query formulator to generate a structured query comprising: a first clause based on a first input from the first field;a second clause based on a second input from the second field; anda logical operator that specifies a relationship between the first clause and the second clause.
  • 8. A system comprising: a client computer executing a search application;a template selector, in the search application, configured to select a template of a plurality of templates, each template comprising a plurality of properties, and configured to send a selected template to a server;a presentation layer, in the search application, configured to receive, from the server, a form and configured to present the form, the form comprising a field and a control for selecting a particular property of the plurality of properties to which corresponding input in the field is to be compared;a query formulater, in the search application, configured to transform search input received via the form, and generate a query comprising a particular property of the plurality of properties and a corresponding particular input which is to be compared against values corresponding to the particular property in one or more data structures of one or more data sources.
  • 9. The system of claim 8, wherein the selected template further specifies a comparison operation between the corresponding particular input and the values corresponding to the particular property in the one or more data structures or metadata for the one or more data structures to be searched in the one or more data sources.
  • 10. The system of claim 9, wherein the selected template further comprises query specification data that is used by the query formulator to generate a structured query comprising a first clause that specifies how the corresponding particular input is compared to the one or more data structures when conducting a search.
  • 11. The system of claim 10, further comprising: one or more search adapters, executing on the client, configure to translate the query into respective data source-specific query strings for the one or more data sources.
  • 12. The system of claim 10, wherein the structured query further comprises: a particular search filter with a required value indicated by the query specification data.
  • 13. The system of claim 8, wherein: said field is a first field;the presentation layer is further configured receive and to present the form comprising the first field and a second field;wherein the selected template further specifies how the search input in the first field and the second field is compared to the one or more data structures in the one or more data sources.
  • 14. The system of claim 13, wherein the selected template further comprises query specification data that is used by the query formulator to generate a structured query comprising: a first clause based on a first input from the first field;a second clause based on a second input from the second field; anda logical operator that specifies a relationship between the first clause and the second clause.
  • 15. A method comprising: receiving, from a client at a server, a selection of a particular template of a plurality of templates, each template comprising a plurality of properties;analyzing, at the server, the plurality of properties specified in the particular template to create a control for selecting a property of the plurality of properties;creating, at the server, a form that includes a field and the control for selecting the property to which corresponding input in the field is to be compared;sending, from the server to the client, the form;wherein search input received via the form comprises a particular property of the plurality of properties and a corresponding particular input which is to be compared against values corresponding the particular property in one or more data structures of one or more data sources;wherein the method is performed using one or more processors.
  • 16. The method of claim 15, wherein the particular template further specifies a comparison operation between the corresponding particular input and the values corresponding to the particular property in the one or more data structures or metadata for the one or more data structures to be searched in the one or more data sources.
  • 17. The method of claim 16, wherein the particular template further comprises query specification data that is used by a query formulator to generate a structured query comprising a first clause that specifies how the corresponding particular input is compared to the one or more data structures when conducting a search.
  • 18. The method of claim 17, further comprising: translating the structured query into respective data source-specific query strings for the one or more data sources.
  • 19. The method of claim 17, wherein the structured query further comprises: a particular search filter with a required value indicated by the query specification data.
  • 20. The method of claim 15, wherein: said field is a first field;the form includes a second field;the particular template further specifies a logical operator; and wherein the method further comprises, generating a structured query comprising:a first clause based on a first input from the first field;a second clause based on a second input from the second field; andthe logical operator that specifies a relationship between the first clause and the second clause.
PRIORITY CLAIM

This application claims benefit under 35 U.S.C. § 120 as a Continuation of U.S. application Ser. No. 14/487,342 filed Sep. 16, 2014, which is a continuation of application Ser. No. 14/077,159, filed Nov. 11, 2013, the entire contents of which is hereby incorporated by reference as if fully set forth herein. The applicant(s) hereby rescind any disclaimer of claim scope in the parent application(s) or the prosecution history thereof and advise the USPTO that the claims in this application may be broader than any claim in the parent application(s).

US Referenced Citations (580)
Number Name Date Kind
5021792 Hwang Jun 1991 A
5109399 Thompson Apr 1992 A
5329108 Lamoure Jul 1994 A
5555503 Kyrtsos et al. Sep 1996 A
5632009 Rao et al. May 1997 A
5670987 Doi et al. Sep 1997 A
5781704 Rossmo Jul 1998 A
5798769 Chiu et al. Aug 1998 A
5845300 Corner Dec 1998 A
6057757 Arrowsmith et al. May 2000 A
6091956 Hollenberg Jul 2000 A
6141659 Barker Oct 2000 A
6161098 Wallman Dec 2000 A
6189003 Leal Feb 2001 B1
6219053 Tachibana et al. Apr 2001 B1
6232971 Haynes May 2001 B1
6247019 Davies Jun 2001 B1
6272489 Rauch et al. Aug 2001 B1
6279018 Kudrolli et al. Aug 2001 B1
6341310 Leshem et al. Jan 2002 B1
6366933 Ball et al. Apr 2002 B1
6369835 Lin Apr 2002 B1
6456997 Shukla Sep 2002 B1
6549944 Weinberg et al. Apr 2003 B1
6560620 Ching May 2003 B1
6581068 Bensoussan et al. Jun 2003 B1
6594672 Lampson et al. Jul 2003 B1
6631496 Li et al. Oct 2003 B1
6642945 Sharpe Nov 2003 B1
6674434 Chojnacki et al. Jan 2004 B1
6714936 Nevin, III Mar 2004 B1
6775675 Nwabueze et al. Aug 2004 B1
6820135 Dingman Nov 2004 B1
6828920 Owen et al. Dec 2004 B2
6839745 Dingari et al. Jan 2005 B1
6877137 Rivette et al. Apr 2005 B1
6976210 Silva et al. Dec 2005 B1
6980984 Huffman et al. Dec 2005 B1
6985950 Hanson et al. Jan 2006 B1
7036085 Barros Apr 2006 B2
7043702 Chi et al. May 2006 B2
7055110 Kupka et al. May 2006 B2
7139800 Bellotti et al. Nov 2006 B2
7158797 Jayaraman et al. Jan 2007 B1
7158878 Rasmussen et al. Jan 2007 B2
7162475 Ackerman Jan 2007 B2
7168039 Bertram Jan 2007 B2
7171427 Witowski et al. Jan 2007 B2
7188100 De Bellis Mar 2007 B2
7269786 Malloy et al. Sep 2007 B1
7278105 Kitts Oct 2007 B1
7290698 Poslinski et al. Nov 2007 B2
7333998 Heckerman et al. Feb 2008 B2
7370047 Gorman May 2008 B2
7379811 Rasmussen et al. May 2008 B2
7379903 Caballero et al. May 2008 B2
7383053 Kent et al. Jun 2008 B2
7426654 Adams et al. Sep 2008 B2
7454466 Bellotti et al. Nov 2008 B2
7467375 Tondreau et al. Dec 2008 B2
7487139 Fraleigh et al. Feb 2009 B2
7502786 Liu et al. Mar 2009 B2
7523100 Bionda et al. Apr 2009 B1
7525422 Bishop et al. Apr 2009 B2
7529727 Arning et al. May 2009 B2
7529734 Dirisala May 2009 B2
7533008 Mangino May 2009 B2
7558677 Jones Jun 2009 B2
7574409 Patinkin Aug 2009 B2
7574428 Leiserowitz et al. Aug 2009 B2
7579965 Bucholz Aug 2009 B2
7596285 Brown et al. Sep 2009 B2
7614006 Molander Nov 2009 B2
7617232 Gabbert et al. Nov 2009 B2
7620628 Kapur et al. Nov 2009 B2
7627812 Chamberlain et al. Dec 2009 B2
7634717 Chamberlain et al. Dec 2009 B2
7652622 Hansen et al. Jan 2010 B2
7703021 Flam Apr 2010 B1
7706817 Bamrah et al. Apr 2010 B2
7712049 Williams et al. May 2010 B2
7716077 Mikurak May 2010 B1
7725530 Sah et al. May 2010 B2
7725547 Albertson et al. May 2010 B2
7730082 Sah et al. Jun 2010 B2
7730109 Rohrs et al. Jun 2010 B2
7747648 Kraft et al. Jun 2010 B1
7760969 Silverbrook et al. Jul 2010 B2
7770100 Chamberlain et al. Aug 2010 B2
7805457 Viola et al. Sep 2010 B1
7809703 Balabhadrapatruni et al. Oct 2010 B2
7818291 Ferguson et al. Oct 2010 B2
7818658 Chen Oct 2010 B2
7870493 Pall et al. Jan 2011 B2
7894984 Rasmussen et al. Feb 2011 B2
7899611 Downs et al. Mar 2011 B2
7917376 Bellin et al. Mar 2011 B2
7920963 Jouline et al. Apr 2011 B2
7933862 Chamberlain et al. Apr 2011 B2
7945470 Cohen et al. May 2011 B1
7962281 Rasmussen et al. Jun 2011 B2
7962495 Jain et al. Jun 2011 B2
7962848 Bertram Jun 2011 B2
7970240 Chao et al. Jun 2011 B1
7971150 Raskutti et al. Jun 2011 B2
7984374 Caro et al. Jun 2011 B2
7971784 Lapstun et al. Jul 2011 B2
8001465 Kudrolli et al. Aug 2011 B2
8001482 Bhattiprolu et al. Aug 2011 B2
8010545 Stefik et al. Aug 2011 B2
8015487 Roy et al. Sep 2011 B2
8024778 Cash et al. Sep 2011 B2
8028894 Lapstun Oct 2011 B2
8036632 Cona et al. Oct 2011 B1
8042110 Kawahara et al. Oct 2011 B1
8103543 Zwicky Jan 2012 B1
8134457 Velipasalar et al. Mar 2012 B2
8145703 Frishert et al. Mar 2012 B2
8185819 Sah et al. May 2012 B2
8214361 Sandler et al. Jul 2012 B1
8214764 Gemmell et al. Jul 2012 B2
8225201 Michael Jul 2012 B2
8229947 Fujinaga Jul 2012 B2
8230333 Decherd et al. Jul 2012 B2
8271461 Pike et al. Sep 2012 B2
8280880 Aymeloglu et al. Oct 2012 B1
8285725 Bayliss Oct 2012 B2
8290926 Ozzie et al. Oct 2012 B2
8290942 Jones et al. Oct 2012 B2
8301464 Cave et al. Oct 2012 B1
8301904 Gryaznov Oct 2012 B1
8312367 Foster Nov 2012 B2
8312546 Alme Nov 2012 B2
8352881 Champion et al. Jan 2013 B2
8368695 Howell et al. Feb 2013 B2
8397171 Klassen et al. Mar 2013 B2
8402047 Mangini Mar 2013 B1
8412707 Mianji Apr 2013 B1
8447722 Ahuja et al. May 2013 B1
8452790 Mianji May 2013 B1
8463036 Ramesh et al. Jun 2013 B1
8477994 Noshadi Jul 2013 B1
8489331 Kopf et al. Jul 2013 B2
8489641 Seefeld et al. Jul 2013 B1
8498984 Hwang et al. Jul 2013 B1
8510743 Hackborn et al. Aug 2013 B2
8514082 Cova et al. Aug 2013 B2
8515207 Chau Aug 2013 B2
8521135 Cryderman Aug 2013 B2
8554579 Tribble et al. Oct 2013 B2
8554653 Falkenborg et al. Oct 2013 B2
8554709 Goodson et al. Oct 2013 B2
8577911 Stepinski et al. Nov 2013 B1
8589273 Creeden et al. Nov 2013 B2
8595234 Siripuapu et al. Nov 2013 B2
8620641 Farnsworth et al. Dec 2013 B2
8639757 Zang et al. Jan 2014 B1
8646080 Williamson et al. Feb 2014 B2
8676857 Adams et al. Mar 2014 B1
8688069 Cazanas et al. Apr 2014 B1
8689108 Duffield et al. Apr 2014 B1
8713467 Goldenberg et al. Apr 2014 B1
8726379 Stiansen et al. May 2014 B1
8739059 Rabenold et al. May 2014 B2
8739278 Varghese May 2014 B2
8742934 Sarpy et al. Jun 2014 B1
8744890 Bernier Jun 2014 B1
8745516 Mason et al. Jun 2014 B2
8762870 Robotham et al. Jun 2014 B2
8781169 Jackson et al. Jul 2014 B2
8787939 Papakipos et al. Jul 2014 B2
8788407 Singh et al. Jul 2014 B1
8799799 Cervelli et al. Aug 2014 B1
8812960 Sun et al. Aug 2014 B1
8830322 Nerayoff et al. Sep 2014 B2
8832594 Thompson et al. Sep 2014 B1
8849254 Bolon Sep 2014 B2
8868537 Colgrove et al. Oct 2014 B1
8917274 Ma et al. Dec 2014 B2
8924872 Bogomolov et al. Dec 2014 B1
8937619 Sharma et al. Jan 2015 B2
8938686 Erenrich et al. Jan 2015 B1
9009171 Grossman et al. Apr 2015 B1
9009827 Albertson et al. Apr 2015 B1
9021260 Falk et al. Apr 2015 B1
9021384 Beard et al. Apr 2015 B1
9037407 Thompson May 2015 B2
9043696 Meiklejohn et al. May 2015 B1
9043894 Dennison et al. May 2015 B1
9116975 Shankar et al. Aug 2015 B2
9123086 Freeland et al. Sep 2015 B1
9262529 Colgrove et al. Feb 2016 B2
9275069 Garrod et al. Mar 2016 B1
9301103 Thompson Mar 2016 B1
9313233 Sprague et al. Apr 2016 B2
9380431 Freeland et al. Jun 2016 B1
20020033848 Sciammarella et al. Mar 2002 A1
20020065708 Senay et al. May 2002 A1
20020091707 Keller Jul 2002 A1
20020095658 Shulman Jul 2002 A1
20020116120 Ruiz et al. Aug 2002 A1
20020174201 Ramer et al. Nov 2002 A1
20020194119 Wright et al. Dec 2002 A1
20030028560 Kudrolli et al. Feb 2003 A1
20030039948 Donahue Feb 2003 A1
20030061211 Shultz et al. Mar 2003 A1
20030140106 Raguseo Jul 2003 A1
20030144868 MacIntyre et al. Jul 2003 A1
20030152277 Hall et al. Aug 2003 A1
20030163352 Surpin et al. Aug 2003 A1
20030225755 Iwayama et al. Dec 2003 A1
20030227746 Sato Dec 2003 A1
20030229848 Arend et al. Dec 2003 A1
20040032432 Baynger Feb 2004 A1
20040064256 Barinek et al. Apr 2004 A1
20040085318 Hassler et al. May 2004 A1
20040095349 Bito et al. May 2004 A1
20040111410 Burgoon et al. Jun 2004 A1
20040126840 Cheng et al. Jul 2004 A1
20040143602 Ruiz et al. Jul 2004 A1
20040143796 Lerner et al. Jul 2004 A1
20040163039 McPherson et al. Aug 2004 A1
20040193600 Kaasten et al. Sep 2004 A1
20040203380 Hamdi et al. Oct 2004 A1
20040221223 Yu et al. Nov 2004 A1
20040260702 Cragun et al. Dec 2004 A1
20040267746 Marcjan et al. Dec 2004 A1
20050027705 Sadri et al. Feb 2005 A1
20050028094 Allyn Feb 2005 A1
20050039119 Parks et al. Feb 2005 A1
20050065811 Chu et al. Mar 2005 A1
20050080769 Gemmell Apr 2005 A1
20050086207 Heuer et al. Apr 2005 A1
20050125436 Mudunuri et al. Jun 2005 A1
20050125715 Franco et al. Jun 2005 A1
20050143096 Boesch Jun 2005 A1
20050162523 Darrell et al. Jul 2005 A1
20050166144 Gross Jul 2005 A1
20050180330 Shapiro Aug 2005 A1
20050182793 Keenan et al. Aug 2005 A1
20050183005 Denoue et al. Aug 2005 A1
20050210409 Jou Sep 2005 A1
20050246327 Yeung et al. Nov 2005 A1
20050251786 Citron et al. Nov 2005 A1
20060026120 Carolan et al. Feb 2006 A1
20060026170 Kreitler et al. Feb 2006 A1
20060059139 Robinson Mar 2006 A1
20060074881 Vembu et al. Apr 2006 A1
20060080619 Carlson et al. Apr 2006 A1
20060093222 Saffer et al. May 2006 A1
20060116991 Calderwood Jun 2006 A1
20060129746 Porter Jun 2006 A1
20060139375 Rasmussen et al. Jun 2006 A1
20060142949 Helt Jun 2006 A1
20060143034 Rothermel Jun 2006 A1
20060149596 Surpin et al. Jul 2006 A1
20060161568 Dettinger Jul 2006 A1
20060203337 White Sep 2006 A1
20060206235 Shakes et al. Sep 2006 A1
20060218637 Thomas et al. Sep 2006 A1
20060241974 Chao et al. Oct 2006 A1
20060242040 Rader et al. Oct 2006 A1
20060242630 Koike et al. Oct 2006 A1
20060250764 Howarth et al. Nov 2006 A1
20060271277 Hu et al. Nov 2006 A1
20060279630 Aggarwal et al. Dec 2006 A1
20070011150 Frank Jan 2007 A1
20070016363 Huang et al. Jan 2007 A1
20070038646 Thota Feb 2007 A1
20070038962 Fuchs et al. Feb 2007 A1
20070043744 Carro Feb 2007 A1
20070057966 Ohno et al. Mar 2007 A1
20070072591 McGary et al. Mar 2007 A1
20070078832 Ott et al. Apr 2007 A1
20070083541 Fraleigh et al. Apr 2007 A1
20070088596 Berkelhamer et al. Apr 2007 A1
20070094389 Nussey et al. Apr 2007 A1
20070118547 Gupta et al. May 2007 A1
20070130541 Louch et al. Jun 2007 A1
20070150369 Zivin Jun 2007 A1
20070174760 Chamberlain et al. Jul 2007 A1
20070192265 Chopin et al. Aug 2007 A1
20070198571 Ferguson et al. Aug 2007 A1
20070208497 Downs et al. Sep 2007 A1
20070208498 Barker et al. Sep 2007 A1
20070208736 Tanigawa et al. Sep 2007 A1
20070233709 Abnous Oct 2007 A1
20070240062 Christena et al. Oct 2007 A1
20070250491 Olszak et al. Oct 2007 A1
20070266336 Nojima et al. Nov 2007 A1
20070294643 Kyle Dec 2007 A1
20080007618 Yuasa Jan 2008 A1
20080040684 Crump Feb 2008 A1
20080051989 Welsh Feb 2008 A1
20080052142 Bailey et al. Feb 2008 A1
20080077597 Butler Mar 2008 A1
20080077642 Carbone et al. Mar 2008 A1
20080082486 Lermant et al. Apr 2008 A1
20080104019 Nath May 2008 A1
20080126951 Sood et al. May 2008 A1
20080155440 Trevor et al. Jun 2008 A1
20080195417 Surpin et al. Aug 2008 A1
20080195608 Clover Aug 2008 A1
20080222295 Robinson et al. Sep 2008 A1
20080227473 Haney Sep 2008 A1
20080252419 Batchelor et al. Oct 2008 A1
20080263468 Cappione et al. Oct 2008 A1
20080267107 Rosenberg Oct 2008 A1
20080276167 Michael Nov 2008 A1
20080278311 Grange et al. Nov 2008 A1
20080288306 MacIntyre et al. Nov 2008 A1
20080301559 Martinsen et al. Dec 2008 A1
20080301643 Appleton et al. Dec 2008 A1
20080313281 Scheidl et al. Dec 2008 A1
20090002492 Velipasalar et al. Jan 2009 A1
20090005070 Forstall et al. Jan 2009 A1
20090027418 Maru et al. Jan 2009 A1
20090030915 Winter et al. Jan 2009 A1
20090037912 Stoitsev et al. Feb 2009 A1
20090055251 Shah et al. Feb 2009 A1
20090088964 Schaaf et al. Apr 2009 A1
20090119309 Gibson et al. May 2009 A1
20090125369 Kloosstra et al. May 2009 A1
20090125459 Norton et al. May 2009 A1
20090132921 Hwangbo et al. May 2009 A1
20090132953 Reed et al. May 2009 A1
20090138790 Larcheveque et al. May 2009 A1
20090143052 Bates et al. Jun 2009 A1
20090144262 White et al. Jun 2009 A1
20090144274 Fraleigh et al. Jun 2009 A1
20090156231 Versteeg et al. Jun 2009 A1
20090164934 Bhattiprolu et al. Jun 2009 A1
20090171939 Athsani et al. Jul 2009 A1
20090172511 Decherd et al. Jul 2009 A1
20090177962 Gusmorino et al. Jul 2009 A1
20090179892 Tsuda et al. Jul 2009 A1
20090187464 Bai et al. Jul 2009 A1
20090222400 Kupershmidt et al. Sep 2009 A1
20090222759 Drieschner Sep 2009 A1
20090222760 Halverson et al. Sep 2009 A1
20090234720 George et al. Sep 2009 A1
20090249244 Robinson et al. Oct 2009 A1
20090265105 Davis et al. Oct 2009 A1
20090281839 Lynn et al. Nov 2009 A1
20090287470 Farnsworth et al. Nov 2009 A1
20090292626 Oxford Nov 2009 A1
20090315679 Bauchot et al. Dec 2009 A1
20100011282 Dollard et al. Jan 2010 A1
20100042922 Bradateanu et al. Feb 2010 A1
20100057716 Stefik et al. Mar 2010 A1
20100058212 Belitz et al. Mar 2010 A1
20100070523 Delgo et al. Mar 2010 A1
20100070842 Aymeloglu et al. Mar 2010 A1
20100070845 Facemire et al. Mar 2010 A1
20100070897 Aymeloglu et al. Mar 2010 A1
20100073315 Lee et al. Mar 2010 A1
20100082842 Lavrov et al. Apr 2010 A1
20100100963 Mahaffey Apr 2010 A1
20100103124 Kruzeniski et al. Apr 2010 A1
20100114887 Conway et al. May 2010 A1
20100121817 Meyer et al. May 2010 A1
20100122152 Chamberlain et al. May 2010 A1
20100131457 Heimendinger May 2010 A1
20100162176 Dunton Jun 2010 A1
20100173619 Hua et al. Jul 2010 A1
20100185984 Wright et al. Jul 2010 A1
20100191563 Schlaifer et al. Jul 2010 A1
20100191884 Holenstein et al. Jul 2010 A1
20100198684 Eraker et al. Aug 2010 A1
20100199225 Coleman et al. Aug 2010 A1
20100214117 Hazzani Aug 2010 A1
20100223543 Marston Sep 2010 A1
20100228812 Uomini Sep 2010 A1
20100250412 Wagner Sep 2010 A1
20100280857 Liu et al. Nov 2010 A1
20100281458 Paladino et al. Nov 2010 A1
20100293174 Bennett et al. Nov 2010 A1
20100306713 Geisner et al. Dec 2010 A1
20100313119 Baldwin et al. Dec 2010 A1
20100318924 Frankel et al. Dec 2010 A1
20100321399 Ellren et al. Dec 2010 A1
20100325526 Ellis et al. Dec 2010 A1
20100325581 Finkelstein et al. Dec 2010 A1
20100330801 Rouh Dec 2010 A1
20110022312 McDonough et al. Jan 2011 A1
20110029526 Knight et al. Feb 2011 A1
20110047159 Baid et al. Feb 2011 A1
20110060753 Shaked et al. Mar 2011 A1
20110061013 Bilicki et al. Mar 2011 A1
20110066933 Ludwig Mar 2011 A1
20110074811 Hanson et al. Mar 2011 A1
20110078055 Faribault et al. Mar 2011 A1
20110078173 Seligmann et al. Mar 2011 A1
20110093327 Fordyce et al. Apr 2011 A1
20110093440 Asakura et al. Apr 2011 A1
20110111786 Rao May 2011 A1
20110117878 Barash et al. May 2011 A1
20110119100 Ruhl et al. May 2011 A1
20110137766 Rasmussen et al. Jun 2011 A1
20110153384 Horne et al. Jun 2011 A1
20110158469 Mastykarz Jun 2011 A1
20110161096 Buehler et al. Jun 2011 A1
20110167105 Ramakrishnan et al. Jul 2011 A1
20110170799 Carrino et al. Jul 2011 A1
20110173032 Payne et al. Jul 2011 A1
20110185316 Reid et al. Jul 2011 A1
20110202557 Atsmon Aug 2011 A1
20110208724 Jones et al. Aug 2011 A1
20110213655 Henkin Sep 2011 A1
20110218934 Elser Sep 2011 A1
20110219450 McDougal et al. Sep 2011 A1
20110225198 Edwards et al. Sep 2011 A1
20110238495 Kang Sep 2011 A1
20110238553 Raj et al. Sep 2011 A1
20110251951 Kolkowtiz Oct 2011 A1
20110258158 Resende et al. Oct 2011 A1
20110270705 Parker Nov 2011 A1
20110276423 Davidson Nov 2011 A1
20110289397 Eastmond et al. Nov 2011 A1
20110289407 Naik et al. Nov 2011 A1
20110289420 Morioka et al. Nov 2011 A1
20110291851 Whisenant Dec 2011 A1
20110310005 Chen et al. Dec 2011 A1
20110314007 Dassa et al. Dec 2011 A1
20120010812 Thompson Jan 2012 A1
20120014560 Obrador et al. Jan 2012 A1
20120015673 Klassen et al. Jan 2012 A1
20120019559 Siler et al. Jan 2012 A1
20120032975 Koch Feb 2012 A1
20120036013 Neuhaus et al. Feb 2012 A1
20120036434 Oberstein Feb 2012 A1
20120050293 Carlhian et al. Mar 2012 A1
20120066296 Appleton et al. Mar 2012 A1
20120072825 Sherkin et al. Mar 2012 A1
20120079363 Folting et al. Mar 2012 A1
20120084118 Bai et al. Apr 2012 A1
20120106801 Jackson May 2012 A1
20120117082 Koperda et al. May 2012 A1
20120131512 Takeuchi et al. May 2012 A1
20120137235 TS et al. May 2012 A1
20120144335 Abeln et al. Jun 2012 A1
20120150578 Mangat et al. Jun 2012 A1
20120159307 Chung et al. Jun 2012 A1
20120159362 Brown et al. Jun 2012 A1
20120159399 Bastide et al. Jun 2012 A1
20120166929 Henderson et al. Jun 2012 A1
20120170847 Tsukidate Jul 2012 A1
20120173985 Peppel Jul 2012 A1
20120180002 Campbell et al. Jul 2012 A1
20120196557 Reich et al. Aug 2012 A1
20120196558 Reich et al. Aug 2012 A1
20120203708 Psota et al. Aug 2012 A1
20120208636 Feige Aug 2012 A1
20120216106 Casey Aug 2012 A1
20120221511 Gibson et al. Aug 2012 A1
20120221553 Wittmer et al. Aug 2012 A1
20120221580 Barney Aug 2012 A1
20120245976 Kumar et al. Sep 2012 A1
20120246148 Dror Sep 2012 A1
20120254129 Wheeler et al. Oct 2012 A1
20120268269 Doyle Oct 2012 A1
20120277914 Crow et al. Nov 2012 A1
20120284345 Costenaro et al. Nov 2012 A1
20120290879 Shibuya et al. Nov 2012 A1
20120296907 Long et al. Nov 2012 A1
20120311684 Paulsen et al. Dec 2012 A1
20120323888 Osann, Jr. Dec 2012 A1
20120330973 Ghuneim et al. Dec 2012 A1
20130005362 Borghei Jan 2013 A1
20130006426 Healey et al. Jan 2013 A1
20130006725 Simanek et al. Jan 2013 A1
20130006916 McBride et al. Jan 2013 A1
20130013642 Klein et al. Jan 2013 A1
20130018796 Kolhatkar et al. Jan 2013 A1
20130024268 Manickavelu Jan 2013 A1
20130046635 Grigg et al. Feb 2013 A1
20130046842 Muntz et al. Feb 2013 A1
20130060786 Serrano et al. Mar 2013 A1
20130061169 Pearcy et al. Mar 2013 A1
20130073377 Heath Mar 2013 A1
20130073454 Busch Mar 2013 A1
20130078943 Biage et al. Mar 2013 A1
20130086482 Parsons Apr 2013 A1
20130097482 Marantz et al. Apr 2013 A1
20130110877 Bonham et al. May 2013 A1
20130111320 Campbell et al. May 2013 A1
20130117651 Waldman et al. May 2013 A1
20130101159 Rosen Jun 2013 A1
20130143597 Mitsuya et al. Jun 2013 A1
20130150004 Rosen Jun 2013 A1
20130151148 Parundekar et al. Jun 2013 A1
20130151388 Falkenborg et al. Jun 2013 A1
20130157234 Gulli et al. Jun 2013 A1
20130165069 Nitta et al. Jun 2013 A1
20130166550 Buchmann et al. Jun 2013 A1
20130176321 Mitchell et al. Jul 2013 A1
20130179420 Park et al. Jul 2013 A1
20130196614 Pahlevani Aug 2013 A1
20130224696 Wolfe et al. Aug 2013 A1
20130225212 Khan Aug 2013 A1
20130226318 Procyk Aug 2013 A1
20130226953 Markovich et al. Aug 2013 A1
20130232045 Tai Sep 2013 A1
20130235749 Cho et al. Sep 2013 A1
20130238616 Rose et al. Sep 2013 A1
20130246170 Gross et al. Sep 2013 A1
20130251233 Yang et al. Sep 2013 A1
20130262171 Solodko et al. Oct 2013 A1
20130262497 Case et al. Oct 2013 A1
20130262527 Hunter et al. Oct 2013 A1
20130263019 Castellanos et al. Oct 2013 A1
20130267207 Hao et al. Oct 2013 A1
20130268520 Fisher et al. Oct 2013 A1
20130279757 Kephart Oct 2013 A1
20130282696 John et al. Oct 2013 A1
20130290011 Lynn et al. Oct 2013 A1
20130290825 Arndt et al. Oct 2013 A1
20130295970 Sheshadri et al. Nov 2013 A1
20130297619 Chandarsekaran et al. Nov 2013 A1
20130311375 Priebatsch Nov 2013 A1
20140019936 Cohanoff Jan 2014 A1
20140032506 Hoey et al. Jan 2014 A1
20140033010 Richardt et al. Jan 2014 A1
20140040371 Gurevich et al. Feb 2014 A1
20140047319 Eberlein Feb 2014 A1
20140047357 Alfaro et al. Feb 2014 A1
20140059038 McPherson et al. Feb 2014 A1
20140067611 Adachi et al. Mar 2014 A1
20140068487 Steiger et al. Mar 2014 A1
20140074855 Zhao et al. Mar 2014 A1
20140079340 Kawano Mar 2014 A1
20140081685 Thacker et al. Mar 2014 A1
20140093174 Zhang et al. Apr 2014 A1
20140095273 Tang et al. Apr 2014 A1
20140095509 Patton Apr 2014 A1
20140108068 Williams Apr 2014 A1
20140108380 Gotz et al. Apr 2014 A1
20140108985 Scott et al. Apr 2014 A1
20140129261 Bothwell et al. May 2014 A1
20140149436 Bahrami et al. May 2014 A1
20140156527 Grigg et al. Jun 2014 A1
20140157172 Peery et al. Jun 2014 A1
20140164502 Khodorenko et al. Jun 2014 A1
20140176606 Narayan et al. Jun 2014 A1
20140189536 Lange et al. Jul 2014 A1
20140195515 Baker et al. Jul 2014 A1
20140195887 Ellis et al. Jul 2014 A1
20140214579 Shen et al. Jul 2014 A1
20140222521 Chait Aug 2014 A1
20140244388 Manouchehri et al. Aug 2014 A1
20140258827 Gormish et al. Sep 2014 A1
20140267294 Ma Sep 2014 A1
20140267295 Sharma Sep 2014 A1
20140279824 Tamayo Sep 2014 A1
20140302783 Aiuto et al. Oct 2014 A1
20140310266 Greenfield Oct 2014 A1
20140316911 Gross Oct 2014 A1
20140333651 Cervelli et al. Nov 2014 A1
20140337772 Cervelli et al. Nov 2014 A1
20140344230 Krause et al. Nov 2014 A1
20140357299 Xu et al. Dec 2014 A1
20150005014 Huang et al. Jan 2015 A1
20150019394 Unser et al. Jan 2015 A1
20150046870 Goldenberg et al. Feb 2015 A1
20150080012 Sprague et al. Mar 2015 A1
20150089424 Duffield et al. Mar 2015 A1
20150100897 Sun et al. Apr 2015 A1
20150100907 Erenrich et al. Apr 2015 A1
20150134633 Colgrove et al. May 2015 A1
20150134666 Gattiker et al. May 2015 A1
20150169709 Kara et al. Jun 2015 A1
20150169726 Kara et al. Jun 2015 A1
20150170077 Kara et al. Jun 2015 A1
20150178825 Huerta Jun 2015 A1
20150178877 Bogomolov et al. Jun 2015 A1
20150186821 Wang et al. Jul 2015 A1
20150187036 Wang et al. Jul 2015 A1
20150227295 Meiklejohn et al. Aug 2015 A1
20150331919 Freeland et al. Nov 2015 A1
20160110458 Colgrove et al. Apr 2016 A1
Foreign Referenced Citations (39)
Number Date Country
102014103482 Sep 2014 DE
102014215621 Feb 2015 DE
1 672 527 Jun 2006 EP
2400448 Dec 2011 EP
2551799 Jan 2013 EP
2560134 Feb 2013 EP
2778977 Sep 2014 EP
2816513 Dec 2014 EP
2835745 Feb 2015 EP
2835770 Feb 2015 EP
2838039 Feb 2015 EP
2846241 Mar 2015 EP
2851852 Mar 2015 EP
2858014 Apr 2015 EP
2858018 Apr 2015 EP
2863326 Apr 2015 EP
2863346 Apr 2015 EP
2869211 May 2015 EP
2884439 Jun 2015 EP
2884440 Jun 2015 EP
2891992 Jul 2015 EP
2911078 Aug 2015 EP
2911100 Aug 2015 EP
2916276 Sep 2015 EP
2516155 Jan 2015 GB
2518745 Apr 2015 GB
2012778 Nov 2014 NL
2013306 Feb 2015 NL
624557 Dec 2014 NZ
WO 2000009529 Feb 2000 WO
WO 2002065353 Aug 2002 WO
WO 2004038548 May 2004 WO
WO 2005104736 Nov 2005 WO
WO 2008064207 May 2008 WO
WO 2009061501 May 2009 WO
WO 2010000014 Jan 2010 WO
WO 2010030913 Mar 2010 WO
WO 2013010157 Jan 2013 WO
WO 2013102892 Jul 2013 WO
Non-Patent Literature Citations (219)
Entry
IBM, “Determining Business Object Structure,” IBM, 2004, 9 pages.
Official Communication for New Zealand Patent Application No. 622501 dated Apr. 1, 2014.
Official Communication for New Zealand Patent Application No. 622501 dated Jun. 5, 2014.
Official Communication for European Patent Application No. 14159447.3 dated Nov. 25, 2014.
Official Communication for European Patent Application No. 14159447.3 dated Jan. 8, 2015.
Official Communication for European Patent Application No. 15157642.8 dated Jul. 20, 2015.
European Patent Office, “Search Report” in application No. 14189802.3-1954, dated May 11, 2015, 8 pages.
European Claims in application No. 14189802.3-1954, dated May 2015, 5 pages.
Li et al., “Interactive Multimodal Visual Search on Mobile Device”, IEEE Transactions on Multimedia, vol. 15, No. 3, dated Apr. 2013, 14 pages.
Umagandhi et al., “Search Query Recommendations Using Hybrid User Profile with Query Logs” International Journal of Computer Applications, vol. 80, No. 10, dated Oct. 2013, 12 pages.
U.S. Appl. No. 13/181,392, filed Jul. 12, 2011, Notice of Allowance, dated Jan. 22, 2015.
U.S. Appl. No. 13/838,815, filed Mar. 15, 2013, Notice of Allowance, dated Jan. 29, 2015.
U.S. Appl. No. 13/838,815, filed Mar. 15, 2013, Notice of Allowance, dated Jun. 19, 2015.
U.S. Appl. No. 13/838,815, filed Sep. 16, 2014, Notice of Allowance, dated Sep. 23, 2015.
U.S. Appl. No. 14/334,232, filed Jul. 17, 2014, Notice of Allowance, dated Nov. 10, 2015.
U.S. Appl. No. 14/690,905, filed Apr. 20, 2015, Notice of Allowance, dated Nov. 23, 2015.
U.S. Appl. No. 13/181,392, filed Jul. 12, 2011, Final Office Action, dated Aug. 28, 2014.
U.S. Appl. No. 14/088,251, filed Nov. 22, 2013, Office Action, dated Feb. 12, 2015.
U.S. Appl. No. 14/487,342, filed Sep. 16, 2014, First Office Action Interview, dated Apr. 23, 2015.
U.S. Appl. No. 14/196,814, filed Mar. 4, 2014, Office Action, dated May 5, 2015.
U.S. Appl. No. 14/027,118, filed Sep. 13, 2013, Office Action, dated May 12, 2015.
U.S. Appl. No. 14/088,251, filed Nov. 22, 2013, Final Office Action, dated May 20, 2015.
U.S. Appl. No. 13/831,199, filed Mar. 14, 2013, Office Action, dated Jun. 3, 2015.
U.S. Appl. No. 14/088,251, filed Nov. 22, 2013, Interview Summary, dated Jun. 30, 2015.
U.S. Appl. No. 14/334,232, filed Jul. 17, 2014, Office Action dated Jul. 10, 2015.
U.S. Appl. No. 13/839,026, filed Mar. 15, 2013, Office Action, dated Aug. 4, 2015.
U.S. Appl. No. 14/088,251, filed Nov. 22, 2013 Office Action, dated Aug. 26, 2015.
U.S. Appl. No. 14/027,118, filed Sep. 13, 2013, Office Action, dated Sep. 16, 2015.
U.S. Appl. No. 13/831,199, filed Mar. 14, 2013, Final Office Action, dated Oct. 6, 2015.
U.S. Appl. No. 14/690,905, filed Apr. 20, 2015, Office Action, dated Oct. 7, 2015.
U.S. Appl. No. 14/196,814, filed Mar. 4, 2014, Office Action, dated Oct. 7, 2015.
U.S. Appl. No. 13/839,026, filed Mar. 15, 2013, Restriction Requirement, dated Apr. 2, 2015.
U.S. Appl. No. 14/077,159, filed Nov. 11, 2013, Notice of Allowance, dated Aug. 15, 2014.
U.S. Appl. No. 14/077,159, filed Nov. 11, 2013, First Office Action Interview, dated Mar. 12, 2014.
Official Communication for European Patent Application No. 14180321.3 dated Apr. 17, 2015.
Official Communication for Australian Patent Application No. 2014201511 dated Feb. 27, 2015.
Official Commuincation for Australian Patent Application No. 2014202442 dated Mar. 19, 2015.
Official Communication for Great Britain Patent Application No. 1404457.2 dated Aug. 14, 2014.
Hansen et al., “Analyzing Social Media Networks with NodeXL: Insights from a Connected World”, Chapter 4, pp. 53-67 and Chapter 10, pp. 143-164, published Sep. 2010.
Official Communication for New Zealand Patent Application No. 628263 dated Aug. 12, 2014.
Gesher, Ari, “Palantir Screenshots in the Wild: Swing Sightings,” The Palantir Blog, Sep. 11, 2007, pp. 1-12.
Official Communication for European Patent Application No. 15155846.7 dated Jul. 8, 2015.
Palmas et al., “An Edge-Bunding Layout for Interactive Parallel Coordinates” 2014 IEEE Pacific Visualization Symposium, pp. 57-64.
Manske, “File Saving Dialogs,” <http://www.mozilla.org/editor/ui_specs/FileSaveDialogs.html>, Jan. 20, 1999, pp. 7.
Huang et al., “Systematic and Integrative Analysis of Large Gene Lists Using David Bioinformatics Resources,” Nature Protocols, 4.1, 2008, 44-57.
Definition “Identify”, downloaded Jan. 22, 2015, 1 page.
Official Communication for European Patent Application No. 14180142.3 dated Feb. 6, 2015.
Microsoft—Developer Network, “Getting Started with VBA in Word 2010,” Apr. 2010, <http://msdn.microsoft.com/en-us/library/ff604039%28v=office.14%29.aspx> as printed Apr. 4, 2014 in 17 pages.
Bugzilla@Mozilla, “Bug 18726—[feature] Long-click means of invoking contextual menus not supported,” http://bugzilla.mozilla.org/show_bug.cgi?id=18726 printed Jun. 13, 2013 in 11 pages.
Official Communication for Netherlands Patent Application No. 2013306 dated Apr. 24, 2015.
Official Communication for European Patent Application No. 14197879.1 dated Apr. 28, 2015.
“A Quick Guide to UniProtKB Swiss-Prot & TrEMBL,” Sep. 2011, pp. 2.
Chen et al., “Bringing Order to the Web: Automatically Categorizing Search Results,” CHI 2000, Proceedings of the SIGCHI conference on Human Factors in Computing Systems, Apr. 1-6, 2000, The Hague, The Netherlands, pp. 145-152.
Official Communication for European Patent Application No. 14187996.5 dated Feb. 12, 2015.
Keylines.com, “An Introduction to KeyLines and Network Visualization,” Mar. 2014, <http://keylines.com/wp-content/uploads/2014/03/KeyLines-White-Paper.pdf> downloaded May 12, 2014 in 8 pages.
Dramowicz, Ela, “Retail Trade Area Analysis Using the Huff Model,” Directions Magazine, Jul. 2, 2005 in 10 pages, http://www.directionsmag.com/articles/retail-trade-area-analysis-using-the-huff-model/123411.
Official Communication for European Patent Application No. 14158861.6 dated Jun. 16, 2014.
Yang et al., “HTML Page Analysis Based on Visual Cues”, A129, pp. 859-864, 2001.
Li et al., “Interactive Multimodal Visual Search on Mobile Device,” IEEE Transactions on Multimedia, vol. 15, No. 3, Apr. 1, 2013, pp. 594-607.
Official Communication for Australian Patent Application No. 2014210614 dated Jun. 5, 2015.
Official Communication for European Patent Application No. 14159464.8 dated Oct. 8, 2014.
Kitts, Paul, “Chapter 14: Genome Assembly and Annotation Process,” The NCBI Handbook, Oct. 2002, pp. 1-21.
Official Communication for European Patent Application No. 14159464.8 dated Jul. 31, 2014.
Official Communication for Australian Patent Application No. 2014210604 dated Jun. 5, 2015.
Rouse, Margaret, “OLAP Cube,” <http://searchdatamanagement.techtarget.com/definition/OLAP-cube>, Apr. 28, 2012, pp. 16.
Goswami, Gautam, “Quite Writly Said!,” One Brick at a Time, Aug. 21, 2005, pp. 7.
Conner, Nancy, “Google Apps: The Missing Manual,” May 1, 2008, pp. 15.
Olanoff, Drew, “Deep Dive with the New Google Maps for Desktop with Google Earth Integration, It's More than Just a Utility,” May 15, 2013, pp. 1-6, retrieved from the internet: http://web.archive.org/web/20130515230641/http://techcrunch.com/2013/05/15/deep-dive-with-the-new-google-maps-for-desktop-with-google-earth-integration-its-more-than-just-a-utility/.
Official Communication for New Zealand Patent Application No. 628840 dated Aug. 28, 2014.
Map of San Jose, CA. Retrieved Oct. 2. 2013 from http://maps.bing.com.
Official Communication for Great Britain Patent Application No. 1413935.6 dated Jan. 27, 2015.
Official Communication for European Patent Application No. 14159464.8 dated Sep. 22, 2014.
Official Communication for Australian Patent Application No. 2014250678 dated Jun. 17, 2015.
Griffith, Daniel A., “A Generalized Huff Model,” Geographical Analysis, Apr. 1982, vol. 14, No. 2, pp. 135-144.
Kahan et al., “Annotea: An Open RDF Infrastructure for Shared Web Annotations”, Computer Networks, Elsevier Science Publishers B.V., vol. 39, No. 5, dated Aug. 5, 2002, pp. 589-608.
Official Communication for Australian Patent Application No. 2014213553 dated May 7, 2015.
Official Communication for New Zealand Patent Application No. 622513 dated Aug. 3, 2014.
Nierman, “Evaluating Structural Similarity in XML Documents”, 6 pages, 2002.
Official Communication for European Patent Application No. 14191540.5 dated May 27, 2015.
Official Communication for European Patent Application No. 14186225.0 dated Feb. 13, 2015.
Ananiev et al., “The New Modality API,” http://web.archive.org/web/20061211011958/http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/modality/ Jan. 21, 2006, pp. 8.
Chung, Chin-Wan, “Dataplex: An Access to Heterogeneous Distributed Databases,” Communications of the ACM, Association for Computing Machinery, Inc., vol. 33, No. 1, Jan. 1, 1990, pp. 70-80.
Official Communication for New Zealand Patent Application No. 627962 dated Aug. 5, 2014.
“A Word About Banks and the Laundering of Drug Money,” Aug. 18, 2012, http://www.golemxiv.co.uk/2012/08/a-word-about-banks-and-the-laundering-of-drug-money/.
Official Communication for Great Britain Patent Application No. 1404574.4 dated Dec. 18, 2014.
“Potential Money Laundering Warning Signs,” snapshot taken 2003, https://web.archive.org/web/20030816090055/http:/finsolinc.com/ANTI-MONEY%20LAUNDERING%20TRAINING%20GUIDES.pdf.
Official Communciation for Great Britain Patent Application No. 1411984.6 dated Dec. 22, 2014.
GIS-NET 3 Public_Department of Regional Planning. Planning & Zoning Information for Unincorporated LA County. Retrieved Oct. 2, 2013 from http://gis.planning.lacounty.gov/GIS-NET3_Public/Viewer.html.
Microsoft Office—Visio, “About connecting shapes,” <http://office.microsoft.com/en-us/visio-help/about-connecting-shapes-HP085050369.aspx> printed Aug. 4, 2011 in 6 pages.
Official Communication for European Patent Application No. 14189802.3 dated May 11, 2015.
Official Communication for European Patent Application No. 14189344.6 dated Feb. 20, 2015.
Definition “Overlay”, downloaded Jan. 22, 2015, 1 page.
Map of San Jose, CA. Retrieved Oct. 2, 2013 from http://maps.yahoo.com.
Manno et al., “Introducing Collaboration in Single-user Applications through the Centralized Control Architecture,” 2010, pp. 10.
Boyce, Jim, “Microsoft Outlook 2010 Inside Out,” Aug. 1, 2010, retrieved from the internet https://capdtron.files.wordpress.com/2013/01/outlook-2010-inside_out.pdf.
Wikipedia, “Federated Database System,” Sep. 7, 2013, retrieved from the internet on Jan. 27, 2015 http://en.wikipedia.org/w/index.php?title=Federated_database_system&oldid=571954221.
Official Communication for European Patent Application No. 14197895.7 dated Apr. 28, 2015.
Official Communication for European Patent Application No. 14199182.8 dated Mar. 13, 2015.
Huff et al., “Calibrating the Huff Model Using ArcGIS Business Analyst,” ESRI, Sep. 2008, pp. 33.
Official Communication for New Zealand Patent Application No. 624557 dated May 14, 2014.
Acklen, Laura, “Absolute Beginner's Guide to Microsoft Word 2003,” Dec. 24, 2003, pp. 15-18, 34-41, 308-316.
Celik, Tantek, “CSS Basic User Interface Module Level 3 (CSS3 UI),” Section 8 Resizing and Overflow, Jan. 17, 2012, retrieved from internet http://www.w3.org/TR/2012/WD-css3-ui-20120117/#resizing-amp-overflow retrieved on.
Liu, Tianshun, “Combining GIS and the Huff Model to Analyze Suitable Locations for a New Asian Supermarket in the Minneapolis and St. Paul, Minnesota USA,” Papers in Resource Analysis, 2012, vol. 14, pp. 8.
Official Communication for New Zealand Patent Application No. 622517 dated Apr. 3, 2014.
Keylines.com, “Visualizing Threats: Improved Cyber Security Through Network Visualization,” Apr. 2014, <http://keylines.com/wp-content/uploads/2014/04/Visualizing-Threats1.pdf> downloaded May 12, 2014 in 10 pages.
Official Communication for European Patent Application No. 14189347.9 dated Mar. 4, 2015.
Keylines.com, “KeyLines Datasheet,” Mar. 2014, <http://keylines.com/wp-content/uploads/2014/03/KeyLines-datasheet.pdf> downloaded May 12, 2014 in 2.
Official Communication for New Zealand Patent Application No. 628495 dated Aug. 19, 2014.
Umagandhi et al., “Search Query Recommendations Using Hybrid User Profile with Query Logs,” International Journal of Computer Applications, vol. 80, No. 10, Oct. 1, 2013, pp. 7-18.
Official Communication for New Zealand Patent Application No. 628161 dated Aug. 25, 2014.
Huff, David L., “Parameter Estimation in the Huff Model,” ESRI, ArcUser, Oct.-Dec. 2003, pp. 34-36.
Hogue et al., “Thresher: Automating the Unwrapping of Semantic Content from the World Wide Web,” 14th International Conference on World Wide Web, WWW 2005: Chiba, Japan, May 10-14, 2005, pp. 86-95.
Canese et al., “Chapter 2: PubMed: The Bibliographic Database,” The NCBI Handbook, Oct. 2002, pp. 1-10.
“Refresh Css Ellipsis When Resizing Container—Stack Overflow,” Jul. 31, 2013, retrieved from internet http://stackoverflow.com/questions/17964681/refresh-css-ellipsis-when-resizing-container, retrieved on May 18, 2015.
Thompson, Mick, “Getting Started with GEO,” Getting Started with GEO, Jul. 26, 2011.
Delcher et al., “Identifying Bacterial Genes and Endosymbiont DNA with Glimmer,” Biolnformatics, vol. 23, No. 6, 2007, pp. 673-679.
Hardesty, “Privacy Challenges: Analysis: It's Surprisingly Easy to Identify Individuals from Credit-Card Metadata,” MIT News on Campus and Around the World, MIT News Office, Jan. 29, 2015, 3 pages.
Official Communication for New Zealand Patent Application No. 628585 dated Aug. 26, 2014.
Bluttman et al., “Excel Formulas and Functions for Dummies,” 2005, Wiley Publishing, Inc., pp. 280, 284-286.
Official Communication for European Patent Application No. 14180432.8 dated Jun. 23, 2015.
Official Communication for European Patent Application No. 14180281.9 dated Jan. 26, 2015.
Hibbert et al., “Prediction of Shopping Behavior Using a Huff Model Within a GIS Framework,” Healthy Eating in Context, Mar. 18, 2011, pp. 16.
Sirotkin et al., “Chapter 13: The Processing of Biological Sequence Data at NCBI,” The NCBI Handbook, Oct. 2002, pp. 1-11.
Madden, Tom, “Chapter 16: The BLAST Sequence Analysis Tool,” The NCBI Handbook, Oct. 2002, pp. 1-15.
Microsoft Office—Visio, “Add and glue connectors with the Connector tool,” <http://office.microsoft.com/en-us/visio-help/add-and-glue-connectors-with-the-connector-tool-HA010048532.aspx?CTT=1> printed Aug. 4, 2011 in 1 page.
Map of San Jose, CA. Retrieved Oct. 2, 2013 from http://maps.google.com.
Notice of Acceptance for Australian Patent Application No. 2014250678 dated Oct. 7, 2015.
Official Communication for Great Britain Patent Application No. 1408025.3 dated Nov. 6, 2014.
“A First Look: Predicting Market Demand for Food Retail using a Huff Analysis,” TRF Policy Solutions, Jul. 2012, pp. 30.
Amnet, “5 Great Tools for Visualizing Your Twitter Followers,” posted Aug. 4, 2010, http://www.amnetblog.com/component/content/article/115-5-grate-tools-for-visualizing-your-twitter-followers.html.
Sigrist, et al., “PROSITE, a Protein Domain Database for Functional Characterization and Annotation,” Nucleic Acids Research, 2010, vol. 38, pp. D161-D166.
“The FASTA Program Package,” fasts-36.3.4, Mar. 25, 2011, pp. 29.
Mizrachi, Ilene, “Chapter 1: GenBank: The Nuckeotide Sequence Database,” The NCBI Handbook, Oct. 2002, pp. 1-14.
U.S. Appl. No. 13/247,987, filed Sep. 28, 2011, Office Action, dated Apr. 2, 2015.
U.S. Appl. No. 13/831,791, filed Mar. 15, 2013, Office Action, dated Mar. 4, 2015.
U.S. Appl. No. 13/835,688, filed Mar. 15, 2013, First Office Action Interview, dated Jun. 17, 2015.
U.S. Appl. No. 14/102,394, filed Dec. 10, 2013, Notice of Allowance, dated Aug. 25, 2014.
U.S. Appl. No. 14/108,187, filed Dec. 16, 2013, Notice of Allowance, dated Aug. 29, 2014.
U.S. Appl. No. 14/135,289, filed Dec. 19, 2013, Notice of Allowance, dated Oct. 14, 2014.
U.S. Appl. No. 14/148,568, filed Jan. 6, 2014, Office Action, dated Oct. 22, 2014.
U.S. Appl. No. 14/148,568, filed Jan. 6, 2014, Office Action, dated Mar. 26, 2015.
U.S. Appl. No. 14/192,767, filed Feb. 27, 2014, Notice of Allowance, dated Dec. 16, 2014.
U.S. Appl. No. 14/225,006, filed Mar. 25, 2014, First Office Action Interview, dated Sep. 10, 2014.
U.S. Appl. No. 14/225,006, filed Mar. 25, 2014, First Office Action Interview, dated Feb. 27, 2015.
U.S. Appl. No. 14/225,084, filed Mar. 25, 2014, First Office Action Interview, dated Sep. 2, 2014.
U.S. Appl. No. 14/225,084, filed Mar. 25, 2014, Notice of Allowance, dated May 4, 2015.
U.S. Appl. No. 14/225,084, filed Mar. 25, 2014, First Office Action Interview, dated Feb. 20, 2015.
U.S. Appl. No. 14/225,160, filed Mar. 25, 2014, Final Office Action, dated Feb. 11, 2015.
U.S. Appl. No. 14/225,160, filed Mar. 25, 2014, Advisory Action, dated May 20, 2015.
U.S. Appl. No. 14/225,160, filed Mar. 25, 2014, First Office Action Interview, dated Oct. 22, 2014.
U.S. Appl. No. 14/268,964, filed May 2, 2014, First Office Action Interview, dated Sep. 3, 2014.
U.S. Appl. No. 14/268,964, filed May 2, 2014, Notice of Allowance, dated Dec. 3, 2014.
U.S. Appl. No. 14/289,596, filed May 28, 2014, First Office Action Interview, dated Jul. 18, 2014.
U.S. Appl. No. 14/289,596, filed May 28, 2014, Final Office Action, dated Jan. 26, 2015.
U.S. Appl. No. 14/289,599, filed May 28, 2014, First Office Action Interview, dated Jul. 22, 2014.
U.S. Appl. No. 14/289,599, filed May 28, 2014, Final Office Action, dated May 29, 2015.
U.S. Appl. No. 14/294,098, filed Jun. 2, 2014, Final Office Action, dated Nov. 6, 2014.
U.S. Appl. No. 14/294,098, filed Jun. 2, 2014, First Office Action Interview, dated Aug. 15, 2014.
U.S. Appl. No. 14/294,098, filed Jun. 2, 2014, Notice of Allowance, dated Dec. 29, 2014.
U.S. Appl. No. 14/306,138, filed Jun. 16, 2014, Final Office Action, dated Feb. 18, 2015.
U.S. Appl. No. 14/306,138, filed Jun. 16, 2014, First Office Action Interview, dated Sep. 23, 2014.
U.S. Appl. No. 14/306,138, filed Jun. 16, 2014, Office Action, dated May 26, 2015.
U.S. Appl. No. 14/306,147, filed Jun. 16, 2014, First Office Action Interview, dated Sep. 9, 2014.
U.S. Appl. No. 14/306,147, filed Jun. 16, 2014, Final Office Action, dated Feb. 19, 2015.
U.S. Appl. No. 14/306,154, filed Jun. 16, 2014, First Office Action Interview, dated Sep. 9, 2014.
U.S. Appl. No. 14/306,154, filed Jun. 16, 2014, Final Office Action, dated Mar. 11, 2015.
U.S. Appl. No. 14/306,154, filed Jun. 16, 2014, Advisory Action, dated May 15, 2015.
U.S. Appl. No. 14/319,765, filed Jun. 30, 2014, First Office Action Interview, dated Feb. 4, 2015.
U.S. Appl. No. 14/319,765, filed Jun. 30, 2014, First Office Action Interview, dated Nov. 25, 2014.
U.S. Appl. No. 14/323,935, filed Jul. 3, 2014, Office Action, dated Jun. 22, 2015.
U.S. Appl. No. 14/323,935, filed Jul. 3, 2014, First Office Action Interview, dated Nov. 28, 2014.
U.S. Appl. No. 14/323,935, filed Jul. 3, 2014, First Office Action Interview, dated Mar. 31, 2015.
U.S. Appl. No. 14/326,738, filed Jul. 9, 2014, First Office Action Interview, dated Dec. 2, 2014.
U.S. Appl. No. 14/326,738, filed Jul. 9, 2014, First Office Action Interview, dated Mar. 31, 2015.
U.S. Appl. No. 14/473,552, filed Aug. 29, 2014, Interview Summary, dated Feb. 24, 2015.
U.S. Appl. No. 14/486,991, filed Sep. 15, 2014, Office Action, dated Mar. 10, 2015.
U.S. Appl. No. 14/504,103, filed Oct. 1, 2014, First Office Action Interview, dated Feb. 5, 2015.
U.S. Appl. No. 14/504,103, filed Oct. 1, 2014, Notice of Allowance, dated May 18, 2015.
U.S. Appl. No. 14/504,103, filed Oct. 1, 2014, First Office Action Interview, dated Mar. 31, 2015.
U.S. Appl. No. 14/579,752, filed Dec. 22, 2014, First Office Action Interview, dated May 26, 2015.
U.S. Appl. No. 14/616,080, filed Feb. 6, 2015, Notice of Allowance, dated Apr. 2, 2015.
U.S. Appl. No. 14/639,606, filed Mar. 5, 2015, First Office Action Interview, dated May 18, 2015.
U.S. Appl. No. 14/639,606, filed Mar. 5, 2015, First Action Interview, dated Jul. 24, 2015.
U.S. Appl. No. 14/306,147, filed Jun. 16, 2014, Office Action, dated Aug. 7, 2015.
U.S. Appl. No. 14/319,765, filed Jun. 30, 2014, Final Office Action, dated Jun. 16, 2015.
U.S. Appl. No. 14/289,596, filed May 28, 2014, Advisory Action, dated Apr. 30, 2015.
U.S. Appl. No. 14/225,006, filed Mar. 25, 2014, Final Office Action, dated Sep. 2, 2015.
U.S. Appl. No. 13/836,815, filed Mar. 15, 2013, Office Action, dated Oct. 24, 2015.
U.S. Appl. No. 14/579,752, filed Dec. 22, 2014, Final Office Action, dated Aug. 19, 2015.
U.S. Appl. No. 13/839,026, filed Mar. 15, 2013, Notice of Allowance, dated Jul. 6, 2015.
U.S. Appl. No. 14/306,154, filed Jun. 16, 2014, Office Action, dated Jul. 6, 2015.
U.S. Appl. No. 14/306,138, filed Jun. 16, 2014, Final Office Action, dated Sep. 14, 2015.
U.S. Appl. No. 14/473,860, filed Aug. 29, 2014, Notice of Allowance, dated Jan. 5, 2015.
U.S. Appl. No. 13/831,199, filed Mar. 14, 2013, Office Action, dated May 9, 2016.
U.S. Appl. No. 14/196,814, filed Mar. 4, 2014, First Office Action Interview, dated Apr. 16, 2014.
U.S. Appl. No. 14/813,749, filed Jul. 30, 2015, Office Action, dated Sep. 28, 2015.
U.S. Appl. No. 14/225,160, filed Mar. 25, 2014, Office Action, dated Aug. 12, 2015.
U.S. Appl. No. 13/831,199, filed Mar. 14, 2013, Final Office Action, dated Nov. 4, 2016.
U.S. Appl. No. 14/490,612, filed Sep. 18, 2014, Final Office Action, dated Aug. 18, 2015.
U.S. Appl. No. 14/486,991, filed Sep. 15, 2014, Notice of Allowance, dated May 1, 2015.
U.S. Appl. No. 14/027,118, filed Feb. 4, 2016, Notice of Allowance, dated Apr. 4, 2016.
U.S. Appl. No. 15/047,405, filed Feb. 18, 2016, Office Action, dated Apr. 1, 2016.
U.S. Appl. No. 14/726,353, filed May 29, 2015, First Office Action Interview, dated Sep. 10, 2015.
U.S. Appl. No. 13/247,987, filed Sep. 28, 2011, Office Action, dated Sep. 22, 2015.
U.S. Appl. No. 12/556,318, filed Sep. 9, 2009, Office Action, dated Jul. 2, 2015.
U.S. Appl. No. 14/631,633, filed Feb. 25, 2015, First Office Action Interview, dated Sep. 10, 2015.
U.S. Appl. No. 14/326,738, filed Jul. 9, 2014, Final Office Action, dated Jul. 31, 2015.
U.S. Appl. No. 14/077,159, filed May 3, 2016, Office Action, dated Mar. 12, 2014.
U.S. Appl. No. 15/145,177, filed May 3, 2016, Office Action, dated Jul. 29, 2016.
U.S. Appl. No. 14/289,599, filed May 28, 2014, Advisory Action, dated Sep. 4, 2015.
U.S. Appl. No. 15/145,177, filed May 3, 2016, Final Office Action, dated Aug. 7, 2015.
U.S. Appl. No. 14/319,765, filed Jun. 30, 2014, Advisory Action, dated Sep. 10, 2015.
U.S. Appl. No. 14/196,814, filed Mar. 4, 2014, Final Office Action, dated Dec. 14, 2016.
U.S. Appl. No. 14/196,814, filed Mar. 4, 2014, Notice of Allowance, dated Apr. 6, 2017.
U.S. Appl. No. 14/225,084, filed Mar. 25, 2014, Office Action, dated Sep. 11, 2015.
U.S. Appl. No. 14/196,814, filed Mar. 4, 2014, Final Office Action, dated Jun. 13, 2016.
U.S. Appl. No. 14/134,558, filed Dec. 19, 2013, Office Action, dated Oct. 7, 20165.
U.S. Appl. No. 13/831,791, filed Mar. 15, 2013, Final Office Action, dated Aug. 6, 2015.
U.S. Appl. No. 14/806,517, filed Jul. 22, 2015, First Office Action Interview, dated Oct. 26, 2016.
Related Publications (1)
Number Date Country
20160110458 A1 Apr 2016 US
Continuations (2)
Number Date Country
Parent 14487342 Sep 2014 US
Child 14985201 US
Parent 14077159 Nov 2013 US
Child 14487342 US