Multi-prefix query optimization
11500883 · 2022-11-15
Assignee
Inventors
Cpc classification
G06F16/9535
PHYSICS
G06F3/0488
PHYSICS
G06F16/9537
PHYSICS
International classification
G06F16/9535
PHYSICS
G06F3/0488
PHYSICS
G06F16/9537
PHYSICS
Abstract
The present invention includes systems and methods for retrieving information via a flexible and consistent targeted search model that employs interactive dynamic menu information retrieval techniques that provide context-specific functionality tailored to particular information channels, as well as to records within or across such channels, and other known state information. Users are presented with a consistent search interface among multiple tiers across and within a large domain of information sources, and need not learn different or special search syntax. A thin-client server-controlled architecture enables users of resource-constrained mobile communications devices to locate targeted information more quickly by entering fewer keystrokes and performing fewer query iterations and web page refreshes, which in turn reduces required network bandwidth.
Claims
1. A method for caching results of multi-prefix user queries in an information retrieval system, the method comprising the following steps: (a) receiving a multi-prefix user query containing a plurality of prefix terms; (b) retrieving from an index, for each prefix term, a list of records containing at least one word having a prefix matching that prefix term; (c) generating a result list for the user query by intersecting the lists of records retrieved from the index; (d) computing the value of a query function to determine whether to cache the result list wherein the value of the query function is equal to an amount of processing time required to retrieve the lists of records from the index and intersect them to generate the result list; (e) conditionally caching the result list in storage, based upon a comparison of the value of the query function to a predefined threshold; (f) whereby a processing time for a subsequent user query is decreased by retrieving the cached result list from storage.
2. The method of claim 1, further comprising the step of pre-caching into storage (prior to receiving the user query), for each single-letter prefix, a list of records containing at least one word having a prefix matching that single-letter prefix.
3. The method of claim 1, further comprising the step of pre-caching into storage (prior to receiving the user query), for each pair of single-letter prefixes, a list of records resulting from the intersection of the list of records corresponding to each letter of that pair.
4. The method of claim 1, wherein the value of the query function is dependent upon a plurality of factors, including the total number of characters in the user query and the processing time required to retrieve the lists of records from the cache in storage and from the index and intersect them to generate the result list.
5. A method for processing multi-prefix user queries in an information retrieval system, the method comprising the following steps: (a) receiving a multi-prefix user query containing a plurality of prefix terms; (b) determining, for each prefix term, whether a list of records corresponding to that prefix term has previously been cached in storage, and, if so, retrieving that list of records; (c) retrieving from an index, for each prefix term not having a corresponding list of records cached in storage, a list of records containing at least one word having a prefix matching that prefix term; (d) generating a result list for the user query by intersecting the lists of records retrieved from the cache in storage and from the index; (e) computing the value of a query function to determine whether to cache the result list wherein the value of the query function is equal to the amount of processing time required to retrieve the lists of records from the cache in storage and from the index and intersect them to generate the result list, (f) conditionally caching the result list in storage, based upon a comparison of the value of the query function to a predefined threshold, (g) whereby the processing time for a subsequent user query is decreased by retrieving the cached result list from storage.
6. The method of claim 5, further comprising the step of pre-caching into storage (prior to receiving the user query), for each single-letter prefix, a list of records containing at least one word having a prefix matching that single-letter prefix.
7. The method of claim 6, further comprising the step of pre-caching into storage (prior to receiving the user query), for each pair of single-letter prefixes, a list of records resulting from the intersection of the list of records corresponding to each letter of that pair.
8. A method for utilizing hybrid prefix terms to facilitate processing of multi-prefix user queries in an information retrieval system, the method comprising the following steps: (a) generating an index of prefix elements, wherein each prefix element is associated with a list of records containing at least one word having a prefix matching that prefix element; (b) sorting the lists of records to identify the Nth longest list, having a length of L records; (c) generating a set of hybrid prefix elements, for each list of records having a length greater than L, by intersecting that list of records with each longer list of records, and adding the sets of hybrid prefix elements to the index; (d) receiving a multi-prefix user query containing a plurality of prefix terms; (e) generating hybrid prefix terms by combining pairs of prefix terms; (f) retrieving from the index, for each prefix term or hybrid prefix term, a list of records corresponding to that prefix term or hybrid prefix term; (g) generating a result list for the user query by intersecting the lists of records retrieved from the index, (h) generating, and adding to the index, a set of repeated hybrid prefix elements, wherein each repeated hybrid prefix element is associated with a list of records containing repeated instances of words having a prefix matching that repeated hybrid prefix element; and (i) replacing repeated single-prefix terms with repeated hybrid prefix terms; (j) whereby the processing time for the user query is decreased due to the prior generation of the hybrid prefix elements added to the index.
Description
BRIEF DESCRIPTION OF DRAWINGS
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19) The figures depict various embodiments of the present invention for purposes of illustration only. One skilled in the art will readily recognize from the following discussion that alternative embodiments of the structures and methods illustrated herein may be employed without departing from the principles of the invention described herein.
DETAILED DESCRIPTION
(20) The Figures (FIGS.) and the following description relate to preferred embodiments by way of illustration only. It should be noted from the following discussion that alternative embodiments of the structures and methods disclosed herein will be readily recognized as viable alternatives that may be employed without departing from the principles of what is claimed.
(21) Reference will now be made in detail to several embodiments, examples of which are illustrated in the accompanying figures. It is noted that wherever practicable similar or like reference numbers may be used in the figures and may indicate similar or like functionality. The figures depict embodiments of the disclosed system (or method) for purposes of illustration only. One skilled in the art will readily recognize from the following description that alternative embodiments of the structures and methods illustrated herein may be employed without departing from the principles described herein.
(22) I. Search Architecture
(23)
(24) The client 118 executes a browser 120, comprises client applications 124 and can connect to the search server 128 via a network 122, which is typically the Internet, but may also be any network, including but not limited to a LAN, a MAN, a WAN, a mobile, wired or wireless network, a private network, or a virtual private network, and any combination thereof. While only a single client 118 is shown, it is understood that very large numbers (e.g., millions) of clients are supported and can be in communication with the search server 128 and search result update module 116 at any time. The client 118 may be a mobile communications device similar to the one described in
(25) The search server 128 includes a search result update module 116, a multi-prefix search module 150, a multi-tier search module 152, and a result delivery search module 154. The search server 128 facilitates multi-prefix, multi-tier, interactive searching by enabling a user to enter prefixes of words or text of a search query to obtain various tier levels of search results. The search server 128 also facilitates multi-prefix, interactive, result delivery searching by enabling a user to enter prefixes of words or text to obtain desired results without having to go through intermediary steps to get those results. The search server 128 also facilitates multi-prefix searching on a mobile communications device.
(26) The search result update module 116 facilitates the update of the search results when a user inputs a keystroke (or pauses for a certain amount of time after entering multiple keystrokes), therefore allowing for interactive search capability. Multi-prefix search module 150 facilitates multi-prefix searching by providing the user the ability to enter the prefix of one or more words of an entire query to obtain desired search results. The multi-tier search module 152 facilitates multi-tier searching by providing different tier levels of results. The result delivery search module 154 facilitates result delivery by searching a plurality of data fields associated with a particular data set in order to produce desired results. Further description regarding usage of these modules is provided below.
(27) The search server 128 is coupled to a data store 112. The data store 112 includes a channel database 114, an index database 130 and a table of contents database 132. A channel represents a content category, such as news, flight information, recipes, etc. The channel database 114 contains records. Each record contains a heading and one or more URLs. The record also contains an indication as to whether each URL references a channel. Then index database 130 contains lists of prefixes and, for each prefix, a list of record IDs that contain words with the prefix, as well as relevancy factors for use in ranking. The table of contents database 132 contains prefix entries to aid in traversing the index. The number of entries contained in the table of contents database 132 affects the time spent traversing the index to find relevant record ID lists. A greater number of entries in the table of contents will slow down the search of the table of contents database 132, but reduce the time spent traversing the index to find relevant record ID lists. Fewer entries contained in the table of contents database 132 will speed up the search of the table of contents, but increase the time spent traversing the index to find relevant record ID lists. Further description regarding usage of these modules is provided below.
(28) As illustrated in
(29) Each data field 144 contains identifying information related to that particular channel. A data field 144 may also contain other information related to that particular channel. For example, in an AMAZON™. Books channel, the data fields 144 may contain items such as a title, an author, an International Standard Book Number (ISBN) and a price. In a White Pages channel, the data fields 144 may contain a name, an address, a home phone number and a mobile phone number. In some embodiments, one data field 144 contains multiple items. In other embodiments, each data field 144 contains separate items.
(30) In some embodiments, a data field 144 may be associated with additional items that represent terms that are equivalent to the original items contained in the data field. For example, in a name data field containing “Robert,” that data field may be associated with terms such as “Bob,” “Bobby” or “Rob” (i.e. terms that are equivalent to the term “Robert”).
(31) Those skilled in the art will recognize that the search server 128 is implemented as a server program executed on a desktop computer, laptop computer, or server-class computer comprising a CPU, memory, network interface, peripheral interfaces and other well known components. The computers themselves preferably run an open-source operating system such as LINUX, have generally high performance CPUs, 1 G or more of memory, and 100 G or more of disk storage. Of course, other types of computers can be used, and it is expected that as more powerful computers are developed in the future, they can be configured in accordance with the teachings here. The functionality implemented by any of the elements can be provided from computer program products that are stored in tangible computer accessible storage mediums (e.g., RAM, hard disk, or optical/magnetic media).
(32) For purposes of illustration,
(33)
(34) The storage device 208 is any device capable of storing data, such as a memory stick, a secure digital (SD) card, a solid-state memory device or a hard drive. The memory 206 stores instructions and data used by the processor 202. The optional pointing device (not shown) is used in combination with the keyboard (also not shown) to input data into the mobile communications device 200. The graphics adapter 212 displays images and other information on the display of the mobile communications device 200. The network adapter 216 couples the mobile communications device 200 to a local or wide area network.
(35) As is known in the art, a mobile communications device 200 can have different components from those shown in
(36) As is known in the art, the mobile communications device 200 is adapted to execute computer program modules for providing functionality described herein. As used herein, the term “module” refers to computer program logic utilized to provide the specified functionality. Thus, a module can be implemented in hardware, firmware and/or software. In one embodiment, program modules are stored on the storage device 208, loaded into the memory 206 and executed by the processor 202. The modules may be loaded as part of the client applications 124.
(37) Embodiments of the entities described herein can include other and/or different modules than the ones described here. In addition, the functionality attributed to the modules can be performed by other or different modules in other embodiments. Moreover, this description occasionally omits the term “module” for purposes of clarity and convenience.
(38) II. Search Operation
(39) A. General Search Operation
(40)
(41) If the desired result is displayed (310—Yes), a result may be selected 312. The result selection is received 314 and the corresponding channel or web page is sent 315 to the client. The channel or web page is then displayed 316 on the display of the mobile communications device. The selection directs the user to the channel or website corresponding to the selected result where the user can input 318 a search query in the channel or web page or simply explore 318 the displayed page. In some embodiments, if the result selected is a web page, a separate web browser is launched to display the web page. As shown in
(42) If the desired result is not displayed (310—No) within the search results, another keystroke may be inputted 304. Again, the user input is received 306, the channel database 114 is searched 307, results are sent 308, and the display area is refreshed accordingly by displaying 309 the search results. Additional keystrokes may be entered until the desired channel is displayed. With each keystroke, the results list is updated by the search result update module 116.
(43) In some other embodiments, users may input space character keystrokes as well as alphabetic or numeric character keystrokes. As shown in
(44) The method described above provides for a multi-prefix, interactive search capability. The search is multi-prefix because if the search term contains multiple words, the user enters the prefix of one or more words of the multi-term search query, therefore, providing the capability for users to enter less keystrokes and obtain a desired search result. The search is interactive because a user is provided feedback (displayed search results) with each keystroke. Based on partial query results, a user can determine when the search is complete and can obtain the desired search result without having to enter the entire search term. Therefore, fewer keystrokes are needed as compared to searching using the current technologies available.
(45)
(46) Search results 926 that match the search query are displayed 330 in the display area 933 as shown in
(47) When the server 128 searches for a search result that matches the search query, the server searches the various data fields and records within a channel data set. In one embodiment, the search is performed on structured data, such as the data set described in the channel database 114. In other embodiments, the search is performed on unstructured data, which includes data and links without categorized fields.
(48)
(49)
(50) Another illustrative example of the flow chart in
(51)
(52)
(53) If the user did not input a key character, or keystroke (406—No), a determination 414 is made as to whether an entry is selected. If the user selects an entry (414—Yes), a determination 416 is made to determine whether the entry is marked as a channel. If the entry is marked as a channel (416—Yes), the base URL is updated 412 to the URL in the selected record and the search query field is cleared 412. If the entry is not marked as a channel (416—No), the web browser is activated and the browser is directed 418 to the URL in the selected record.
(54)
(55) Index entries are created 512 for each prefix in each word in each heading of the record if the prefix is in the list of disambiguating prefixes. Each entry contains the prefix and the record ID, as well as the position that the word occurred in the heading, which is used as a relevancy factor in ranking. The entries are sorted 514 in alphabetical order by prefix. The list of index entries is split 516 into lists—one list for each prefix. The list of record IDs is compressed 518.
(56)
(57) Process 600 begins and two offsets are initialized 602 at the start of the index. The record ID list that begins at the offset is retrieved 604 from the index. The prefix and length are retrieved from the record ID list. The difference between the offset and the last offset is determined 606. If the difference between the offset and the last offset is smaller than the predetermined threshold (606—No), the length is added 612 to the offset. A determination 614 is then made as to whether the offset is greater than the size of the index. If the offset is greater than the size of the index (614—Yes), then the creation of the table of contents is complete. If the offset is not greater than the size of the index, the record ID list that begins at the offset is retrieved 604 from the index.
(58) If the difference between the offset and the last offset is at least as large as the threshold (greater or equal to the threshold) (606—Yes), then the prefix and offset are appended 608 to the table of contents. The last offset is then set 610 to the offset and the length is added 612 to the offset.
(59)
(60) If the ID is not the last ID on the list (712—No), the current ID is dropped 718 from each list. Again, a determination 708 is made as to whether the next IDs are the same for all ID lists. If the next IDs are not the same (708—No), the list with the smallest next ID is selected 720. If that ID is the last ID in any of the ID lists (722—Yes), the result list is ordered 714 by relevancy and sent 716 for display. If that ID is not the last ID in any of the ID lists (722—No), that ID is dropped 724 from that ID list and a determination 708 is made as to whether the next IDs are the same for all ID lists.
(61)
(62) If the prefix is not smaller than the search term (808—No), then the index is processed 812 at the index offset and the table of contents scan is complete. The next entry from the index is retrieved 814. A determination 816 is made as to whether the prefix is smaller than the search term. If the prefix is smaller than the search term (816—Yes), the process repeats at step 814.
(63) If the prefix is greater than the search term (816—No), the scanning of the index is completed and a determination 818 is made as to whether the search term is prefix of the prefix. If the search term is a prefix of the prefix, then the record ID list is used 820 at the index offset. If the search term is not a prefix of the prefix, then no match is found for the particular search term.
(64) B. Smart Prefix Query Optimizations
(65) In certain situations, such as those involving relatively large data sets, the performance of the processes described above can be improved by implementing certain optimizations (described below) that are targeted to relatively large information domains without significantly impacting performance with respect to smaller data sets. For example, the English version of Wikipedia includes over 3 million articles containing over 1 billion words, and is roughly 25 times as large as the Encylopedia Britannica (the next largest English language encyclopedia). Yet, even without these optimizations, the performance of certain embodiments of the above processes could be considered acceptable. Yet, the performance of such processes with respect to the WorldCat bibliographic database (which contains over 150 million records from over 70,000 libraries, and is roughly 60 times larger than Wikipedia English) is noticeably slower unless certain optimizations are implemented.
(66) To understand certain performance bottlenecks that result from processing relatively large information domains, and to identify potential optimizations or other improvements, it is helpful to examine certain steps illustrated in
(67) In one embodiment, the TOC for typical data sets contains between a few hundred and a few thousand entries. The WorldCat TOC contains over 325,000 entries. Nevertheless, even searching this many entries in a linear fashion does not impose a noticeable performance penalty, indicating that this step is not a significant bottleneck. A multi-tier TOC could of course be generated if desired (ie, creating “next-level” TOCs for each higher-level TOC) to reduce the time required to linearly search the TOC.
(68) The lists of record IDs corresponding to each prefix in a query are then retrieved (eg, from disk into memory) and intersected to yield a result list of record IDs satisfying the constraints of the query. In one embodiment, the record ID lists corresponding to each prefix in the query are retrieved and intersected with one another simultaneously. In other words, because the lists have been previously sorted in this embodiment, it is relatively straightforward to process multiple lists in parallel to generate a sorted result list containing only those items found in every list.
(69) The result list is then ranked to display to the user an ordered list of the most “relevant” results. In one embodiment, rather than ranking all of the elements in the result list (since only the “top N” elements will be displayed to the user), a “heap” is employed to identify and rank the top N elements without having to rank the remaining elements in the result list.
(70) As a general matter, the processing time required to generate a result list is affected by a number of different factors. One significant factor is the “retrieval time”—ie, the time required to retrieve the lists from memory, which increases significantly for longer lists that require more disk accesses. Longer lists, even if stored entirely in RAM, may also significantly impact overall processing time. The overall processing time is typically proportional to the “intersection time” or time required to generate a single list by intersecting multiple lists. This intersection time is in turn proportional to the number of elements in the longest list, and in the result list. In addition, the overall processing time is proportional to the “ranking time” or time required to rank the elements in each list. Even when a “heap” is employed to identify and rank only the top N elements for display to the user, the ranking time required for this heap-based ranking is proportional to the number of elements in the result list.
(71) Thus, it is apparent that one key factor or bottleneck affecting the overall query-processing performance time is the size of the lists corresponding to each prefix in the query, in particular the existence of one or more lists with a relatively large number of elements. Not surprisingly, lists corresponding to single-letter prefixes (such as the letter “a”) are exponentially larger than those corresponding to longer prefixes. The size of a list drops quickly as the length of the corresponding prefix increases, and as the number of prefixes in a query increases. In fact, particularly short queries (eg, queries having a length of 3 or fewer characters, measuring the total number of characters in a query, even including the spaces between prefix terms) tend to require significantly more overall processing time than do longer queries.
(72) For example, the “a” list for the WorldCat data set contains over 60 million record IDs, while the “ab” list contains fewer than 3 million record IDs and the “abe” list contains fewer than 250,000 record IDs. Moreover, the result list from the “a b” query (ie, the list of IDs for those records that contain both word(s) beginning with “a” and word(s) beginning with “b”) contains fewer than 4 million record IDs and the “a b e” query yields a result list containing fewer than 2 million record IDs. As noted above, retrieving long lists into memory can result in multiple disk accesses that significantly increase overall processing time, in addition to the time required to intersect long lists with one another and rank a relatively long result list.
(73) In one embodiment, query processing time is reduced significantly by caching the lists that result from processing extremely short queries (eg, with a length of 3 or less). The first time such a short query is encountered, the sorted result list of record IDs is stored for use should the same short query be encountered in the future. It should be noted that relatively short queries are also more likely to recur than are longer queries, thus further justifying the caching of such queries. During the processing of these subsequent queries, the results will be available instantly, as the entire ranked result list will already be stored in the cache.
(74) Moreover, in one embodiment, the cache can be preloaded with result lists representing certain very short queries, such as those corresponding to single-character prefixes (“1”, “a”, etc) or even queries with combinations of these very short prefixes (eg, all pairs of single-character prefixes). In one embodiment, result lists are cached corresponding to queries containing every paired combination of 1-character, 2-character and even 3-character prefixes (or even pairs of longer prefixes, depending upon available memory). Although the number of query result lists stored in the cache may be quite large (thousands or even millions), the sizes of such lists tend to be relatively small (as noted above, exponentially smaller than the sizes of the original lists corresponding to single-character and other short prefixes). A few gigabytes of cache storage can thus yield dramatic performance improvements.
(75) In one embodiment, a threshold overall query length (eg, L=3) can be employed to cache only those prefixes (whether preloaded or encountered at query time) whose total length (even including spaces between prefix terms) does not exceed that threshold. In another embodiment, a threshold processing time (eg, t=0.1 seconds) can be employed to cache only those queries whose overall processing time (including retrieval and intersection of all lists and ranking of the result list) exceeds that threshold.
(76) Of course, these optimizations can also be combined—eg, preloading the cache with all result lists of 3-character and shorter queries, and then supplementing the cache with all result lists from queries that require more than 0.1 seconds to process. Moreover, other factors (beyond the overall query length and query processing time) can also be considered, individually and in combination. For example, the existence or prevalence of short prefixes (eg, those with no more than 2 characters) could be a factor in the determination of whether to cache a query containing such prefixes. The number of prefix terms (eg a threshold of 3 or fewer terms) could be another such factor. Such factors can be weighted (eg, based on relative priority) and combined to calculate a threshold function that can be used to determine whether to cache the results of a particular query (whether preloaded or at query time).
(77) Moreover, the result lists from queries for which those factors or combinations thereof can be predetermined (eg, all queries of 3 or fewer characters) can be preloaded into the cache, while the lists resulting from queries for which certain factors cannot be predetermined (eg, the overall query processing time or the number of prefix terms in a query) must be computed at query time, after which a determination can be made as to whether to cache such lists of query results. The overall query processing time might even differ for the same query due to other real-time factors (eg, memory usage), and could be outweighed by factors such as the overall query length, the length of individual prefix terms or the number of prefix terms (or perhaps other factors).
(78) Regardless of which function or specific combination of these optimizations is employed, the goal is the same—to cache the record ID lists corresponding to queries that require (or will likely require) significant processing time when first encountered and/or will (or may be likely to) recur in a subsequent search in the future.
(79) Turning to the query-processing embodiment illustrated in
(80) In the event that step 1310 reveals that the result list for the current query had not previously been cached, then the result list for the current query is computed in step 1312 (including, as described above, the intersection of the lists of record IDs for each prefix and ranking of the result list). In addition, a function of this query is computed in step 1314. As noted above, that function might be as simple as returning the overall length of the query, or, in another embodiment, the function's value might be calculated by assigning a weight (eg, a multiplier) to that overall length, as well as to the number of prefix terms in the query and the length of those terms (and perhaps other factors potentially relevant to the overall processing time).
(81) In any case, the value of this function is then compared in step 1316 to a predetermined threshold (L) to determine whether to cache the result list for the current query before the results are delivered to the user in step 1330. If the function does not exceed the predetermined threshold, then the result list is first stored in the cache in step 1318. In either case, the results are then delivered to the user in step 1330.
(82) As noted above, regardless of whether the cache is preloaded, the decision as to whether the cache the results of processing a query can be based solely on the time required for that processing to occur. In other words, to avoid repeating a relatively lengthy query processing procedure should that same query occur in the future, the results can simply be cached if they exceed a certain processing time threshold.
(83) Turning to the query-processing embodiment illustrated in
(84) In the event that step 1360 reveals that the result list for the current query had not previously been cached, then the result list for the current query is computed in step 1362 (including, as described above, the intersection of the lists of record IDs for each prefix and ranking of the result list), while measuring the overall time (eg, t seconds) required to process this query.
(85) This overall time (t) is then compared in step 1364 to a predetermined threshold (T seconds) to determine whether to cache the result list for the current query before the results are delivered to the user in step 1380. If the query processing time (t) exceeds the predetermined threshold (T), then the result list is first stored in the cache in step 1366. In either case, the results are then delivered to the user in step 1380.
(86) As noted above, relatively short prefixes (such as the single-letter prefixes) tend to correspond to relatively long lists of record IDs that require a significant amount of processing time to load into memory and intersect with other lists. Moreover, exponentially smaller lists can be generated by intersecting such lists with one another, in effect creating “hybrid prefix lists” that correspond to multiple prefixes. In this regard, the nomenclature “a-b” represents the hybrid list resulting from the intersection of the “a” and “b” single-prefix lists, which includes those records that contain both word(s) beginning with “a” and word(s) beginning with “b.” As noted above with respect to the WorldCat data set, the list of record IDs corresponding to the single prefix “a” exceeded 60 million, while the query “a b” (equivalent to the hybrid prefix list “a-b”) yielded a result list of fewer than 4 million IDs.
(87) In addition to preloading the cache at query time with certain of these hybrid prefix lists (as well as single-prefix lists), significant performance improvements in overall query processing time can also be achieved by generating and including certain of these hybrid prefix lists in the index, and then identifying at query time relevant hybrid prefix lists from the current query (which, by definition, were previously generated and are thus stored in the index) and retrieving them from the index. As a result, the relevant hybrid lists need not be regenerated at query time, thereby avoiding the processing time otherwise required to retrieve and intersect multiple lists (eg, retrieving the “a” and “b” lists into memory, and then intersecting them to create the “a-b” list, as opposed to simply retrieving the “a-b” list from the index).
(88) Because long-term disk storage space is available in relatively larger capacities and is relatively less expensive than is short-term memory (eg, RAM), a relatively larger number of combinations of these hybrid prefix lists can be precomputed and stored in the index (as compared with those that can be precomputed and stored in a memory cache). Cost-benefit analyses can be made on a case-by-case basis with respect to the particular data set being indexed in order to determine the relevant set of “slow” prefixes—ie, those prefixes that occur frequently in the data set and thus correspond to relatively long lists of record IDs that will require large amounts of query processing time to retrieve, intersect with other lists and rank.
(89) Moreover, in one embodiment, a given amount of available disk space is used to determine the number of average-sized hybrid lists that can be added to the index. By generating and sorting all single-prefix candidate lists at index time, and selecting the longest N lists as “slow” candidates for hybridization, these N lists can be intersected with one another to yield approximately N(N−1)/2 hybrid (“faster”) lists. In other embodiments the square of N is used for simplification. In other words, for a given amount of disk space, one can determine the number N of longest “slow” list candidates to select for hybridization at index time. At query time, any such “slow” prefix terms can be extracted from the query and combined with any other “slow” prefix term to create a hybrid prefix whose corresponding list has already been precomputed and stored in the index. These hybrid prefix lists can be extracted from the index, along with the remaining single-prefix lists present in the query, and then simultaneously intersected to generate a result list that can be ranked for delivery to the user.
(90) For example, for a large library catalog data set containing roughly 150 million records, the relevant set of “slow” prefixes might include certain prefixes that are common to this particular data set, such as “book” (as well as “boo” and “bo” and “b”), “19” and “1” (due to the common publication year “19xx”), “fiction” (and its prefixes), “non” (and its prefixes, “by” (and its prefixes, typically preceding the list of authors), etc.
(91) These particular “slow” prefixes can be combined, for example, with the single-letter prefixes (which can also be combined with one another) to generate hybrid prefix lists that are exponentially smaller than their single-prefix counterparts. It should also be noted that hybrid prefixes that share a common prefix (eg, “1˜1” or “by˜b”) need not be generated, as they would yield the same list as the longest single-prefix component. As will be discussed in greater detail below, however, certain of these “repeated” hybrid prefixes can be redefined to be useful in the context of identifying records containing multiple instances of a prefix.
(92) To implement hybrid prefixes in one embodiment, hybrid prefix candidates are selected (eg, as noted above from the N longest single-prefix lists, and perhaps also including all single-character prefixes) and intersected with one another to generate a set of hybrid prefix lists, which are then added to the index along with the single-prefix lists, as illustrated in
(93) It should be noted that, in one embodiment, the ranking of a prefix in a record is the index of the first word in the record to which the prefix corresponds. For example, the prefix “h” in the record “mary had a little lamb” would have a rank of 2 because it matches the second word in that record. In one embodiment, the rank for hybrid prefixes is the same as the rank for the first component prefix of the hybrid prefix. For example, the hybrid prefix “a˜1” would have a rank of 3 for that same record (where “a” had a rank of 3 and “1” had a rank of 4). In other embodiments, both ranking entries (3 and 4) are maintained in the list. Ranking optimizations are discussed in greater detail below.
(94) Turning to the hybrid prefix list generation indexing embodiment illustrated in
(95) For example, if there are 100 hybrid candidate (single prefix) lists, each having a length greater than 1000 records (eg, the smallest hybrid candidate, the 100.sup.th list, might contain 1003 records, while the largest hybrid candidate, the 1.sup.st list, might contain 50,000 records), step 1420 would initially involve the intersection of the 1.sup.st list with the 2.sup.nd list, the 1.sup.st list with the 3rd list, . . . and the 1.sup.st list with the 100.sup.th list. The next time through the loop, it would involve the intersection of the 2.sup.nd list with the 3.sup.rd list, the 2.sup.nd list with the 4.sup.th list, . . . and the 2.sup.nd list with the 100.sup.th list, and so on until the 99.sup.th list is intersected with the 100.sup.th list.
(96) In another embodiment, this process could continue (eg, the first time through the loop) until none of the hybrid lists involving the 1.sup.st list had a length exceeding L. For example, if the hybrid list resulting from the intersection of the 1.sup.st list and 2.sup.rd list had a length exceeding L, that list might be further intersected (ie, a hybrid triple) with the 3.sup.rd list, and so on, until its length no longer exceeded L. One problem with this alternative approach, however, is that the number of lists, and thus the utilization of disk space, can become unwieldy. Moreover, it is typically the case that the intersection of two lists results in a significantly shorter list, thus making this approach of relatively limited value in most cases.
(97) Continuing, however, with the current embodiment, at step 1425, a determination is made as to whether more lists remain to be processed (i.e., incrementing i and determining whether it yet equals N) and, if so, repeating the loop at step 1415. Once all hybrid lists have been generated (ie, all combinations of hybrid candidate lists with one another), then these hybrid lists are added to the index in step 1430.
(98) The list of the hybrid prefix candidates (ie, the list of “slow” prefixes whose corresponding single-prefix lists were used to generate the hybrid prefix lists) is then added to the index in step 1440 for use at query time. At this point, the index includes not only single-prefix lists of record IDs, but hybrid prefix lists as well, in addition to a list of “slow” prefixes that were used to create such hybrid prefix lists. At query time, as illustrated below with respect to
(99) Turning to the hybrid prefix query embodiment illustrated in
(100) Instead of simply intersecting lists from the index corresponding to the single-prefix terms of the query, the purpose of this process illustrated in
(101) Before identifying these “slow” single-prefix terms, the query is analyzed in step 1465 to determine whether the query contains only one prefix term. If so, the search can be performed in step 1490 by simply loading the list of record IDs corresponding to that sole prefix term (ie, the result list), ranking that list and delivering the results to the user as discussed above.
(102) If, however, the query contains more than one prefix term, each prefix term is compared against the list of “slow” prefixes in the index in step 1470 to determine which of these prefix terms is on that list, and is thus a “candidate” for hybridization. At this point, each of these hybrid candidate prefix terms is paired with another such candidate in step 1475. Each such pair will identify a hybrid list that can be loaded from the index (effectively replacing the pair of “slow” prefix terms) and intersected in parallel (together with the lists from the index corresponding to the remaining “non-slow” single-prefix terms in the query) to generate a result list as discussed above.
(103) However, various additional optimizations of this pairing of hybrid candidates can be performed in step 1475—ie, to select the pairs that will ultimately yield the result list in the shortest amount of time. All pairings will yield the same results, but some may do so faster than others. For example, all possible pairings could be considered, and those yielding the shortest average hybrid lists could be chosen. Or perhaps the pairings that generate the single shortest hybrid list could be chosen, or the pairings that yield the shortest “longest hybrid list.”
(104) Regardless of how this pairing process is performed in step 1475, each such pairing will yield a hybrid list that can be loaded from the index—by definition, because the lists corresponding to every combination of the “slow” prefixes were intersected to generate a hybrid list stored in the index, as discussed above with respect to
(105) However, if step 1480 reveals that there are an odd number of these hybrid candidate prefix terms, then one such candidate will remain after the others have been paired. If so, then that remaining candidate is paired in step 1485 with any of the other hybrid candidates (even though all of them have already have been paired with another candidate). In one embodiment, that remaining candidate is paired with whichever other candidate yields the shortest list. Given the relatively small number of prefix terms (much less “slow” prefix candidates) in most queries, the performance penalty associated with conducting multiple such comparisons is relatively small.
(106) After having generated all hybrid prefix pairings (including any odd candidate), the search can be performed in step 1490 by loading from the index the lists of record IDs corresponding to these hybrid prefixes (and to the remaining single prefix terms), intersecting these lists in parallel as discussed above to generate the result list, ranking the result list and then delivering the results to the user.
(107) One wrinkle (alluded to above) involves the problem of queries containing “repeated” prefixes. For example, the query “m t m” (eg, seeking records relating to “Mary Tyler Moore”) must retrieve records that contain multiple (in this case, 2 or more) words beginning with the “m” prefix. Yet, if the list of record IDs generated for the single prefix “m” is simply intersected with itself, it will retrieve the same list, ie, a superset list of the desired list (because it may include records that do not contain 2 words beginning with the “m” prefix).
(108) One optimization that addresses this problem is to generate hybrid lists at index time to reflect all repeated instances of each prefix within a given record. For example, in one embodiment, the hybrid prefix “m˜m” reflects the second occurrence in a record of a word beginning with the “m” prefix. This process is discussed in greater detail below with respect to
(109) Turning to the repeated hybrid prefix list generation indexing embodiment illustrated in
(110) Each record (r) is then processed in a loop beginning with step 1510, for which a list (s) is initialized in step 1512 that will contain a list of all single and hybrid prefixes found in the words in that record. Each word (w) within the headers of the current record (r) is then processed in an inner loop beginning with step 1515. Each prefix (p) within the current word (w) is then processed in yet another inner loop beginning with step 1520 (starting with the first character of that word).
(111) Hybrid prefix (q) is initialized to prefix (p) in step 1522, and is then used to accumulate a repeated hybrid prefix if necessary. For example, if the letter “b” was a prefix found in the first word (“big”) of a particular record, and was added to list (s), and was then also found in a subsequent word (“ball”) of that record, the hybrid prefix (q) would be generated while processing the first letter of that subsequent word (ie, transforming the value of (q) from “b” to “b˜b”) once it was recognized that the prefix “b” was already present in list (s)—ie, because it had been added while processing the first word (“ball”) of that record. These steps are explained below.
(112) Hybrid prefix (q) is processed in step 1524 by searching to determine whether it is present in list (s). If it is present (as “b” was present in the example above), then hybrid prefix (q) is transformed in step 1526 by appending to it the tilde character (“˜”) and the current prefix (p)—just as “b” was transformed into “b˜b” in the example above. Steps 1524 and 1526 are then repeated with respect to this newly transformed hybrid prefix (q) until it is no longer found in list (s).
(113) In other words, continuing our example above, if a subsequent word of the record (“bounce”) was being processed, the single prefix “b” and the hybrid prefix (“b˜b”) would already be present in list(s)—ie, because they were added while processing the words “big” and “ball” respectively. As a result of processing the word “bounce,” the hybrid prefix (q) would be initialized to “b,” then transformed into “b˜b” (upon finding “b” in list (s)), and finally transformed into “b˜b˜b” (upon finding “b˜b” in list (s)) which would not yet be present in list (s).
(114) Eventually, however, this hybrid prefix (q) will not be found in list (s) at step 1524, and will be added to list (s) in step 1528. It should be noted that single prefixes will also be added in step 1528—eg, while processing the first occurrence of a word in a record that begins with that single prefix (such as the prefix “b” first encountered in the word “big” or the prefix “ba” first encountered in the word “ball” in the example above).
(115) After adding the single or hybrid prefix to list (s) in step 1528, the next prefix, if any, of the current word (w) is processed. Continuing with our example, while processing the first character (prefix) “b” of the first word “big,” the initial prefix “b” is added to list (s). Because additional characters of that word have yet to be processed, the next prefix “bi” is processed, later followed by the final prefix “big,” at which point no more characters remain and the next word will be processed.
(116) This search for remaining characters (and thus prefixes) in the current word occurs at step 1530. If a next character is present, it is appended to prefix (p) in step 1532, and processing returns to step 1522 where hybrid prefix (q) is set equal to prefix (p) so that this next (longer) prefix can be processed as discussed above. In other words, this longer prefix (or perhaps a hybrid prefix generated therefrom) will be added to list (s) in step 1528, and this processing of word (w) will continue until all of its characters have been processed, at which point the next word (w), if any, of record (r) will be processed.
(117) The search for remaining words in the current record (r) occurs in step 1534. If a next word is present, then word (w) is set to that next word in step 1536, and processing returns to step 1520 where new word (w) is processed starting with the first character (prefix) of that word (w), as described above. If no more words are present in the headers of the current record (r), then the processing of that record is almost complete.
(118) The index is then updated in step 1538, by updating the list of prefixes (including hybrid prefixes) for the entire set of records covered by the index. In other words, if a prefix of list (s) was not yet present in that list, it is added to the list. If it was present, a new entry is generated, including the record ID of current record (r) and a ranking offset—ie, the position within record (r) of the word corresponding to that prefix entry (eg, “4” if the first occurrence of a word beginning with that prefix is the 4.sup.th word of that record). In addition, any “slow” single prefixes can also be replaced with lists of corresponding hybrid prefixes as discussed above with respect to
(119) It should be noted that, for repeated hybrid prefixes, the ranking offset will correspond to the nth occurrence of a word beginning with that hybrid prefix. In other words, the prefix “m” might have a rank of 4 if the 4.sup.th word of the record is the first occurrence of a word beginning with “m,” while the repeated hybrid prefix “m˜m” might have a rank of 7 if the 7.sup.th word of the record is the second occurrence of a word beginning with “m” (and so forth for as many repeated instances of a word beginning with “m” as are present in the record). In another embodiment, the list corresponding to a hybrid prefix (eg, “m˜m”) could contain multiple entries (repeating the same record ID) associated with the multiple occurrences of a word having that prefix within a given record.
(120) After updating the index, and completing the processing of the current record (r), the search for remaining records in the data set occurs in step 1540. If remaining records exist, then record (r) is set to the next record in step 1542, and processing returns to step 1512 where list (s) is reinitialized for use with new record (r), which is processed as described above.
(121) Once all records in the current data set have been processed, the index is sorted in step 1544 by prefix, and by record ID within each prefix. The index is then split in step 1546 into separate lists of record IDs for each prefix. Finally, each record ID list is compressed in step 1548 (using any of various well-known compression techniques). A table of contents (TOC) is then created as described above with respect to
(122) At query time, queries are parsed, in one embodiment, not only to replace “slow” single-prefix query terms with hybrid prefixes (as discussed above), but also to replace repeated single-prefix query terms with repeated hybrid prefixes (eg, “m˜m”, “m˜m˜m”, etc) that are generated and used to search the index, as shown in the repeated hybrid prefix query embodiment illustrated in
(123) The query is parsed into separate prefix terms which are sorted alphabetically in step 1560. As will become clear, this alphabetical sorting facilitates the determination of which prefix terms are prefixes of other prefix terms, indicating the existence of a “repeated” prefix in the query (ie, the search for records having multiple occurrences of words beginning with the same repeated prefix). Each prefix term (t) is processed in a loop starting at step 1562.
(124) The prefix term (t) is checked in step 1564 to determine whether it has been marked to be skipped—ie, whether an identical prefix term exists in the query, in which case such repeated prefix terms were already used to construct a repeated hybrid prefix term which reflects multiple occurrences within a record of words having that prefix.
(125) If the prefix term (t) was not marked to be skipped, then the query (q) is set to that term (t) in step 1566. Then, that term (t) is compared to each remaining prefix term in the query in a loop beginning with step 1568. The prefix term (t) is compared in step 1570 to the next remaining prefix term (t′) to determine whether term (t) is a prefix of term (t′). If so, then a repeated prefix exists in the query, and a tilde (˜) followed by the prefix term (t) is appended to the query (q) in step 1572. Moreover, If that next prefix term (t′) is found to be identical, in step 1574, to the prefix (t) being processed, then the prefix (t) is marked to be skipped in step 1576 (ie, when that next prefix term (t′) is processed and compared to all subsequent prefix terms in the query).
(126) Otherwise, if the prefix term (t) is not identical to the next prefix term (t′), or is not a prefix of that term, then the processing of prefix term (t) continues in step 1578 by determining whether there exists another subsequent prefix term (t′). If so, then t′ is set to that next prefix term in step 1580, and processing resumes at step 1570 to determine whether prefix term (t) (still being processed) is a prefix of that next remaining prefix term t′.
(127) Eventually, after prefix term (t) has been compared to all remaining subsequent prefix terms (t′), then no remaining prefix terms will be found in the query in step 1578. At that point, the query (q) is emitted in step 1582, effectively saving either that single prefix term (t), or a repeated hybrid prefix term (t′) to be used in its place, to load a corresponding list from the index once all prefix terms of the query have been processed.
(128) Having processed prefix term (t) by comparing it to all subsequent prefix terms (t′) in the query, the query is further analyzed in step 1584 to determine whether any subsequent terms exist in the query. If so, then the next prefix term (t) is prepared for processing in step 1586, and processing returns to step 1564 to determine whether prefix term (t) has been marked to be skipped (ie, whether an identical prefix term (t) has already been processed and replaced with a repeated hybrid prefix term). This new prefix term (t) will be compared with all subsequent prefix terms in the query as discussed above until no unprocessed prefix terms remain in the query.
(129) At that point, each single or repeated hybrid prefix term emitted in step 1582 is used in step 1588 to load its corresponding list of record IDs from the index, which are (as discussed above) intersected in parallel in step 1590 to generate a result set of record IDs that is ranked and delivered to the user.
(130) It should be noted that skipped prefix terms (ie, those replaced by repeated hybrid prefix terms) may also be used at this point to load corresponding lists from the index. Although these lists will not alter which record IDs are present in the result list, they could impact the subsequent ranking of those records in the result list. Alternatively, as noted above, the list in the index corresponding to a hybrid prefix (eg, “m˜m”) could contain multiple entries (repeating the same record ID) associated with the multiple occurrences of a word having that prefix within a given record. In any event, sufficient information is available in the index to enable the records in the result list to be ranked in accordance with a desired ranking scheme.
(131) Another set of optimizations relates to the issue of ranking or ordering the records in the result set before delivering the results to the user. These optimizations involve both index-time and query-time modifications to the processes discussed above. Table 0 below highlights some of these ranking concerns, by illustrating a result set of 5 records as delivered to the user after implementing certain ranking optimizations discussed below.
(132) For example, without these optimizations, a query of “twain” might have resulted in a ranking of these 5 resulting records as 2, 2, 7, 10 and 2, based on the position of the word (prefix) “twain” within each record, and thus would have resulted in a different ordering than is illustrated in Table 0. In fact, books about Mark Twain would generally be ranked ahead of books by Mark Twain, which may not be the desired result.
(133) One optimization involves a prioritized set of factors used for ordering the records in a result set. For example, if the top 20 results will be displayed to the user, then the first factor would be applied to generate the top 20 results from the result list. Any of those results which are equal with respect to this first factor would be further ordered based on the second factor, and so on, until all 20 results are distinguished from one another (or, if still equal, simply left in the order in which they were extracted from the index, or ordered alphabetically, etc).
(134) In one embodiment, there exist 4 such factors which, in prioritized order, include: (1) Number of Adjacent Pairs of Query Prefix Terms (ie, the number of adjacent query prefix terms that are prefixes of adjacent words in each record of the result set; (2) GPS or related “geographic proximity” of a record (eg, from a data set of restaurants) to a known geographic location (eg, a specified geographic location, such as an address or a zip code, the present location of a mobile device, etc); (3) Positional Ranking of a record based on the position of the words matching the prefix query terms relative to the beginning of the record and/or the beginning of one or more fields of the record; and (4) Popularity of a record based on external information (eg, the popularity of songs in a data set, book sales or availability in multiple libraries, articles that are most frequently updated over time, etc). In other embodiments, these (and other) factors can be weighted and a function of these weighted factors can be computed and used as a single ranking criterion.
(135) These factors will be discussed in reverse priority order, beginning with Popularity, which, in one embodiment, only comes into play in the ranking process with respect to records that score equally with respect to the other 3 higher priority factors. For example, in a data set of song titles, various publicly available measures of each song's popularity can be stored in the index and extracted to distinguish and rank those records of the result set which are otherwise equally ranked after consideration of the other higher priority factors. Similarly, articles from the English Wikipedia data set could be distinguished based upon the frequency of their revision over time (ie, an indirect measure of public popularity). A nationwide or worldwide library catalog data set could utilize the number of libraries (or other locations) at which each title is available as a rough measure of each title's popularity. English-language titles could be given preference (at least for queries originating in English-speaking countries), or the title having the most recent year of publication could be deemed the most “popular” title. It should be noted that the measure of popularity employed will typically be targeted to the particular data set being indexed.
(136) Turning to the Positional Ranking factor, this factor, in one embodiment, involves simply determining the lowest offset into the record of any word having as a prefix one of the prefix search terms. For example, looking at the first record in Table 0, that record could have resulted from a “finn twain” query. The record would have a rank of 2 (second word in the record) with respect to the prefix term “twain” and a rank of 6 with respect to the prefix term “finn.” In one embodiment, the rank could simply be computed as the lowest of such rankings (ie, 2). It should also be noted that, in this embodiment, the initial occurrence of the word in the record was used to determine the rank stored in the index.
(137) One problem with this methodology, however, is the fact that data sets, such as those illustrated in Table 0, often contain “structured data” that is regularly divided into “fields” of data, such as titles, authors, genre, publisher name, year of publication, etc. As noted above, storing a word's offset into a record, as opposed to its offset into a particular field of that record, may yield unintended results. One solution to this problem is to delimit the fields of a record and assign periodic ranking values (eg, 10, 20, 30, etc) to the delimiters (using relative position to determine intra-field ranking, and essentially “padding” the fields to avoid accidental adjacency across fields). Alternatively, individual fields could be ranked relative to one another by assigning the delimiter ranking values accordingly or utilizing different types of delimiters (eg, to equate multiple author fields to one another, but rank them higher than a “publication year” field).
(138) In short, by taking into account intra-field position and relative inter-field importance, this Positional Ranking factor will better reflect the intentions of the user initiating the query. Accidental adjacency across fields can be avoided. Moreover, the relevant importance of fields can be distinguished based upon the particular data set being searched. Yet, as will be discussed below, other factors beyond Positional Ranking are, in some embodiments, of even greater importance.
(139) The GPS (or geographic proximity) field is particularly useful with respect to certain types of data sets. It may have no meaning, however, with respect to other data sets, such as a library catalog database of books, as illustrated in Table 0. Yet, for a domain of restaurants, users may be particularly interested in those restaurants that are closest to a pre-specified geographic location (eg, a particular zip code or address), or to the user's current location—eg, as indicated via a GPS device on the user's mobile phone. In one embodiment, a separate table is maintained with entries for each record containing corresponding GPS (latitude/longitude) information. While processing a given record of the result list, the relevant corresponding entry is retrieved from this table, the distance to the reference location is calculated and added to the record's entry in the result list, and a heap is employed (as discussed above) to process the result list moving the “best” record (eg, the one closest to the reference point) to the top of the heap. The best N elements are then extracted from the top of the heap and delivered to the user.
(140) Finally, the “Number of Adjacent Pairs of Query Prefix Terms” is considered. This factor is (in one embodiment) prioritized above the others because most queries include relatively few (typically one or two) prefix terms. As more terms are added to a query, adjacent query prefix terms tend to yield results with adjacent words having those prefixes (eg, first and last names, common phrases, etc). Yet, other records may inadvertently be included simply because they contain words having all of the query prefix terms, and even at early positions within the record or a field of the record. This factor will distinguish such inadvertently included records with a level of effectiveness that improves dramatically as the number of query prefix terms increases.
(141) Turning to Table 0, it is evident that a query “twain” would rank these 5 records relatively high, as they all include “Mark Twain” in either the title or author fields. Additional query terms (eg, “Mark Twain Huck Finn”) would further distinguish certain records in the result set, moving those whose titles included “Mark Twain” and/or “Huckleberry Finn” or whose authors included “Mark Twain” to higher ranked positions, while moving other records to lower ranked positions (such as books about “Huckleberry Finn” by authors coincidentally having the first name “Mark,” or other such inadvertent matches of the query term prefixes).
(142) In one embodiment, the scoring based on this factor is simply the number of adjacent prefix query terms yielding adjacent corresponding words. For example, for the query “Mark Twain Huck Finn,” the scoring would either be 0, 1, 2 or 3, with a point contributed for each adjacent pair of terms—“Mark Twain,” “Twain Huck,” and “Huck Finn”. This factor alone accounts for much of the ranking process in this embodiment.
(143) However, to the extent records scored equally with respect to this factor, the next factor (GPS) would then be considered, if relevant to the data set being searched. When relevant, this factor is also of particular importance (eg, when searching for the closest “Starbucks” locations while traveling, and relying on the user's mobile phone GPS unit). It is unlikely that the next two factors will even be considered when the GPS factor is relevant.
(144) When the GPS factor is not relevant, the Positional Ranking factor will likely move records such as the 5 records shown in Table 0 toward the top of the list. Yet, the 5 records shown in Table 0 score equally with respect to this factor (ie, all scoring 2 due to the position of “Twain” in either the title or author fields of each record). This is where the final factor of “Popularity” comes into play.
(145) As noted above, this could reflect any notion of popularity relevant to the particular data set involved. In one embodiment, that includes the availability of the referenced book (eg, in the most number of libraries). In another embodiment, it could include the most recent publication year. In any event, at this point, if the user is not satisfied with the results, an additional query search term is very likely to yield a more desirable ranking
(146) TABLE-US-00001 TABLE 0 Mark Twain's Adventures of Huckleberry Finn: a documentary volume by Tom Quirk Detroit: Gale Cengage Learning, c2009. Book: Bibliography; English Mark Twain on the move: a travel reader by Mark Twain; Alan. Gribben; Jeffrey Alan Melton Tuscaloosa: University of Alabama Press, c2009.<br>Book: Bibliography; English Life on the Mississippi by Mark Twain; Justin. Kaplan New York, N.Y.: Signet Classics, 2009. Book: Bibliography; English A Connecticut Yankee in King Arthur's court by Mark Twain Waterville, Me.: Kennebec Large Print, 2009. Book: Fiction; English Mark Twain and the river by Sterling North New York: Puffin Books, 2009. Book: Biography; English
(147) Another ranking optimization involves moving the ranking process inside the “inner loop” (where multiple lists are retrieved into memory and intersected in parallel), as opposed to ranking the records in the result list after it has been generated by intersecting the multiple lists. In one embodiment, while generating (in the “inner loop”) the record IDs that are present in all of the lists being intersected, the ranking calculation (regardless of which factor or combination of factors is being calculated) is performed.
(148) In this embodiment, the heap priority is reversed, with the “worst” record being placed on the top of the heap. Moreover, the size of the heap is limited to the number of results desired by the user (eg, 20 records if the 20 “best” resulting records will be displayed). This is in contrast to the heap process that derives the 20 best results from the (already generated) results list, which would employ a heap the size of the (typically much larger) entire results list.
(149) As each new result is generated, it is compared to the record at the top of the heap, which contains the currently lowest-ranked result in the heap. If the new result ranks even lower, then it is discarded. Otherwise, it replaces the result at the top of the heap, and the heap is rebalanced.
(150) Thus, the heap will remain at a small constant size (eg, 20 records), minimizing the performance impact of rebalancing the heap, and many results will be discarded after a single comparison (with the record at the top of the heap). Moreover, a significant number of memory/disk accesses will be eliminated. A smaller heap, for example, has a better chance of being stored completely in a processor's L1 cache, thereby significantly reducing overall processing time.
(151) III. Dynamic Menus
(152) As noted above, a consistent search mechanism, particularly one that employs variations of the interactive, multi-prefix and multi-tier techniques described above, facilitates targeted searches in a mobile communications environment by reducing the requirements for user interaction and data entry, which in turn reduces the use of local processing and network bandwidth resources. As also noted above, results of these targeted searches are often organized into lists of “records” that share common attributes or “fields” (from train schedules and movie times to famous people, places and events, to restaurant addresses and phone numbers, and various other diverse types of relatively structured information).
(153) As a result, these data fields, such as phone numbers, often can be “recognized” and extracted to enable actions specific to a particular record, such as calling a selected restaurant (even if the phone number data associated with that restaurant was also maintained as unstructured text with respect to the user's query). Other actions may become relevant as a result of the context of a user's query or other state information (such as the time of day, or the user's location, as detected by GPS equipment on the user's mobile phone).
(154) Whether these additional actions are specific to one or more particular records or to all records within one or more particular channels, or are available generally among all channels (or combinations of the above), they can provide users with alternatives to simply selecting and activating a particular record. In one embodiment, dynamic menus are employed to enable a wide variety of alternative actions that are not only appropriate to particular channels or records, but are also well-suited to the limitations of a mobile communications environment, in that they can be invoked with relatively minimal user interaction and use of limited resources.
(155) For example, having located a restaurant via a multi-prefix search within a “favorite” local restaurant channel, a user could place a call to that restaurant via a single menu selection or push of a phone's talk button. Another menu selection might display a map of that restaurant, or directions from the user's current location (utilizing GPS data). A related search for an after-dinner movie (within a movie channel) might include a different set of menu selections, such as “movie reviews” or “starring actors.” The result is a consistent targeted search mechanism across different information domains (channels) that provides users with alternative sets of actions appropriate to the information found as a result of one or more user queries. Users can locate this information and invoke these ancillary actions with relatively few keystrokes, menu selections and button presses, which in turn reduces the use of local processing and memory resources, as well as network latency and bandwidth.
(156) A. Dynamic Menu Architectural Overview
(157) In one embodiment, the client portion of this (client-server) dynamic menu mechanism is implemented as a standalone application on a resource-constrained mobile communications device, such as client 118, illustrated in
(158) Such reliance on server 128 is also advantageous because mobile communications devices vary widely in their ability to support more complex functionality, such as the use of Javascript and Ajax to create interactive web-based applications. Moreover, additional functionality can be implemented on server 128 without modifying any of the client applications 124 on client 118, thereby providing users over time not only with the promise of new channels, for example, but also with added functionality associated with one or more existing channels.
(159) To facilitate this level of extensibility, the client (implemented, for example, as one of the client applications 124 on client 118, and sometimes referred to herein interchangeably with client 118) provides relatively general-purpose functionality. In other embodiments, such functionality could be integrated into browser 120, or into another application such as a search engine, or into a special-purpose application dedicated to one or more information channels. Server 128, however, remains in control, relying upon client 118 to interpret the specific instances of the “dynamic menu structure” provided to client 118 by server 128 in response, for example, to user queries.
(160) In one embodiment, this general-purpose functionality implemented by a client application on client 118 includes (i) sending HTTP requests to search server 128 (such requests containing, for example, keystrokes of a user's multi-prefix query or a URI resulting from a user's selection of a channel, a record or a dynamic menu item), (ii) receiving HTTP responses from server 128 (containing, for example, HTTP headers along with search results and related data), (iii) parsing these HTTP responses (for example, to extract and render this data on the screen of client 118, as well as to extract dynamic menu information from the HTTP headers), and (iv) interacting with the user of client 118 to facilitate subsequent user queries and selections of search results or dynamic menu items, which can be utilized to generate and send additional HTTP requests (in some cases via browser 120), as well as to invoke “built-in” functionality on client 118, such as placing a phone call or sending an email in response to a user request.
(161) Much of the basic search-related functionality implemented on both client 118 and server 128 has been explained above in great detail. The integrated dynamic menu mechanism described below, however, significantly extends such functionality by providing users with alternatives to simply selecting and activating a particular record.
(162) For example, as explained above, search server 128 generates results at various tiers of a multi-tier user query, and sends those results to client 118. Such results include a collection of records 142 with associated fields 144 (illustrated in
(163) For example, when a user activates record 906 in
(164) In one embodiment, Server 128 extends this functionality (to provide users with alternatives to simply selecting and activating a particular record) by generating additional fields associated with the records of a particular channel (or with multiple channels or channel categories). For example, with respect to the Starbucks Store Locator channel 906, server 128 might generate an additional field containing the phone number of each Starbucks store record. Server 128 would send such additional fields to client 118 (for example, in response to user queries) along with the other fields noted above that identify each record and provide a URI representing the action to be taken when the user selects and activates that record. As noted above, while the phone number displayed in record 935 could, in one embodiment, be unstructured text for the purposes of a user's multi-prefix query, server 128 could generate (and reformat, if necessary) a separate phone number field for each record containing the phone number (if available) of that particular Starbucks store.
(165) Moreover, in one embodiment, server 128 generates one or more HTTP headers representing alternative actions a user could invoke, for example, with respect to a particular selected record. Such actions can utilize not only the additional fields generated by server 128, but also any other data or state information discernible by client 118 (such as elapsed time or user location via GPS services).
(166) One such HTTP header might contain a dynamic menu item that enables a user to call the phone number of a selected record. For example, if a user selects “Los Altos Rancho” record 935 and activates the dynamic menu mechanism (rather than the action associated with the record itself), client 118 could display a dynamic menu containing a “Call Store” item and, if the user selects that item, client 118 could then dial the phone number of the Los Altos Rancho Starbucks store (contained in the additional phone number field previously sent to client 118 by server 128 in response to the user's multi-prefix “Ran 1 a” query).
(167) As noted above, users can select a record without activating it in various ways, depending upon the capabilities of the user's particular mobile communications device. For example, some devices have buttons that are dedicated (or can be assigned) to prompt a client application to invoke a menu. Others, such as touchscreen devices, often do not distinguish between the selection and activation of an object, in which case an icon or other visible identifier could be displayed next to each record, or client 118 could distinguish the number of times a record was “tapped,” or how long it had been “held down.”
(168) In one embodiment, an HTTP header includes not only the name of the dynamic menu item that is displayed to the user (for example, “Call Store”), but also the actions to be performed when the user activates that dynamic menu item (whether directly or indirectly, for example, by pressing a phone button while a particular record is selected). Such actions are designed to be extremely dynamic, taking into account not only the context of a user's queries but also the state of the user's mobile communications device, which can change frequently.
(169) The HTTP header architecture allows dynamic menu items to be applicable globally to all channels, as well as to one or more particular channels, and even to particular records within or across channels. In one embodiment, a dynamic menu item can be specified to appear only if data pertaining to that item is available for a particular selected record. For example, a “Call Store” menu item might not appear if a phone number was not available for the particular store record selected by the user. These HTTP headers can leverage virtually any state information known to the user's mobile communications device (including information obtained via a remote server), such as a user's GPS location or whether a user is logged into a particular channel or web site.
(170) In one embodiment, HTTP headers can reference data fields which not only can vary from one record to the next (such as phone numbers), but which can themselves contain record-specific dynamic menu item names and actions. In other words, distinct data fields can be defined (and populated on a per-record basis) such that the name of the dynamic menu item itself (and its associated action) will vary from record to record, even within a selected channel (due to the ability of the HTTP header to reference these distinct data fields).
(171) This extensible “dynamic dynamic menu” feature enables the generation of record-specific, as well as channel-specific, menu items. For example, a movie channel might contain various types of field data, such as movie titles and actor names. Moreover, the “many-to-many” relationships among such data might well be maintained in a relational database that can be queried, for example, for a list of movie titles in which a given actor has appeared, or for a list of actors that have appeared in a given movie. A dynamic menu could, in one embodiment, display different menu items for search result “actor” records (for example, “Show Bio” or “Show Filmography”) than for search result “movie” records (for example, “Show Actors” or “Show Reviews”), even if a user's multi-prefix query was applied to actors as well as movies (provided the type of search result could be ascertained by server 128).
(172) The architecture of these HTTP headers, including their use of state information as well as additional fields added by server 128, is discussed in greater detail below.
(173) B. Dynamic Menu HTTP Header Architecture
(174) One embodiment of this dynamic menu HTTP header architecture is illustrated in Table 1 below, which includes six distinct fields of a dynamic menu HTTP header. The utility of this dynamic menu HTTP header architecture will become apparent from the following explanation of these fields with reference to the “SAMPLE Dynamic Menu HTTP Headers” listed in Table 2 below.
(175) TABLE-US-00002 TABLE 1 HTTP HEADER FIELD VALUES COMMENTS Header Name B-Menu-Entry-nnn Number “nnn” determines Order of Menu Item within Dynamic Menu Context C Current Channel Indicates whether Menu Item can apply to Current I Current Selected Item Channel, Selected Item or BOTH B BOTH Menu Item will NOT be visible/enabled if Focus on Channel when “I” set or Focus on Selected Item when “C” set Processing Type I Processed IN Client Upon Menu Item activation, Client issues HTTP or other Request O Processed OUT of Client (via URI constructed in accordance with “Action” field) either: (eg, Launch Browser) To Server (to retrieve data for display IN Client, and including built-in client application and mobile device functionality) OR To Browser or Other Client App (launched to retrieve data OUTSIDE of Client, eg, via URI passed from Client) Next Step F Follow Link After processing the Action (specified below), Client might “Do R Refresh Channel Nothing” (N) or perform an additional action, such as: S Refresh Channel and “Follow Link” (F) as if user had activated Selected Item (row or Clear Search Filter record) N Do Nothing OR “Refresh Channel” ® to provide updated/refreshed data (or “S” to also clear any existing search filter) Menu Item Name [TEXT of Menu Item name] This is the text that will be displayed in the Dynamic Menu Menu Items displayed in the order specified in the “Header Name” field Action *** [Used to construct URI] See explanation below regarding the process for constructing a URI to be processed in accordance with the “Processing Type” field
(176) TABLE-US-00003 TABLE 2 SAMPLE Dyamic Menu HTTP Headers B-Menu-Entry-1: BIN; Add to favorites; http://live.boopsie.com/service/set/?favorite=$1&base=$0&uri=$2\r\n B-Menu-Entry-3; IIF; Click to call; tel:$4/; Talk\r\n B-Menu-Entry-2: IIS; Search from here; http://live.boopsie.com/service/set/?name=$1&latlon=$3& response=text\r\n B-Menu-Entry-4: CIN; Change location; i:change %20location\r\n B-Menu-Entry-6: ION; Directions to here; http://live.boopsie.com/service/directions/?latlon=$3\r\n B-Menu-Entry-5: BIS; Clear location; http://live.boopsie.com/service/set/?latlon=\r\n B-Menu-Entry-7: ION; Movie details; http://wap.aol.com/moviefone/Movie.do?theaterid=$6&movieid=$7&showtime=$8&showsvnopsis=true\r\n
(177) Each row of the SAMPLE Dynamic Menu HTTP Headers” shown in Table 2 represents a distinct dynamic menu HTTP header, delimited from other headers (in one embodiment) by “carriage return\newline” or “\r\n” characters. Each header in turn represents a dynamic menu item (such as “Add to favorites”) that might appear when the dynamic menu is invoked and displayed on a user's mobile communications device.
(178) As noted above, in one embodiment, users can also invoke such dynamic menu items via built-in functionality on a mobile device, such as pressing a “Talk” button that is mapped to invoke a “Click to call” dynamic menu item. In this embodiment, the mapping occurs by adding a symbolic name to the header after the Action field (for example, “Talk” in row 2 of Table 2 to invoke this dynamic menu item whenever the client application detects that the user presses the built-in “Talk” button on client 118).
(179) In another embodiment, these symbolic names can also be used to modify the functionality of a dynamic menu item. For example, a “Map” symbolic name could direct the client application to pass a URI to a third-party mapping application (such as Google Maps), if one is installed on client 118, rather than to a web browser, such as browser 120. In yet another embodiment, a web browser might automatically detect certain location-related information in a URL obtained from the client application and elect to utilize a third-party application that it knows has been installed on client 118 (such as Google Maps), by reformatting the URL (intended for a web server) in accordance with a published API defined by such third-party application.
(180) As noted above, in one embodiment, whenever server 128 (see
(181) The first field of each header, illustrated in Table 1, is the “Header Name” field. This field identifies the header as a “dynamic menu” HTTP header by virtue of the “B-Menu-Entry-nnn” designation, where “nnn” serves to determine the order in which the “Menu Item Name” (discussed below) will appear when the dynamic menu is displayed. Referring to the headers in Table 2, it can be seen that their display order is determined by the number following the “B-Menu-Entry-” designation, as opposed to the order in which they were transmitted to the client (reflected as the order of the rows in Table 2). For example, the header in row 2 of Table 2 would appear as the third menu item in the dynamic menu actually displayed to the user. Finally, note that this “Header Name” field is delimited, in one embodiment, from the next field (“Context”) by a colon (“:”) character.
(182) The “Context” field in Table 1 is a single-character field that relates to the context or circumstances in which the header's dynamic menu item will be displayed. In other words, even when the dynamic menu is displayed on a user's device, not every dynamic menu item will necessarily be displayed. In one embodiment, the dynamic menu item might be displayed only when the “focus” is on the current channel (C), or only when the focus is on a particular selected record or item (I) displayed in response to a query within that channel. Otherwise, it might always be displayed (for example, in both (B) cases) whenever the dynamic menu is displayed (assuming, in one embodiment, that referenced data fields are non-empty).
(183) In one embodiment, the “focus” will typically be on the “channel” (or channel category) when results are received from server 128 (for example, in response to a user query or menu selection). But, when a user selects (but does not activate) a particular item or record within a channel, the focus is then switched to that particular item or record.
(184) The header in row 3 of Table 2, for example, containing a “Search from here” dynamic menu item, would, in this example, not be displayed unless the focus was on a particular selected record or item (I). In the case of a “Yellow Pages” channel, for example, it would not make sense (contextually) to display a “Search from here” dynamic menu item before the user enters a search query (in which case no records would be visible) or after the user enters a partial or complete query but before the user selects a record (in which case multiple items might be visible). But, once the user selects a particular record, it makes sense in this context to display the “Search from here” menu item, which, if activated, would replace the “reference location” for future searches with the location associated with that selected store. As noted above, however, in the event that the particular selected store did not have a listed address, then the client application could detect that the “address” field was empty and (using a different mechanism discussed below) prevent the display of the “Search from here” menu item for that particular selected record.
(185) In the case of the “Add to favorites” header in row 1 of Table 2, the “B” designation indicates that this function could apply to the current channel as well as to the selected item. Continuing with the above Yellow Pages example, if the focus is still on the channel (for example, before the user enters a query and selects a record), then activation of the “Add to favorite” dynamic menu item would add the Yellow Pages channel to the user's list of “favorites.” But, if the user selects a particular store, and then activates the “Add to favorite” dynamic menu item, then the selected store (not the Yellow Pages channel) would be added to the user's list of “favorites.”
(186) Yet, the “Change location” header in row 4 of Table 2 would only be displayed if the focus was on the channel, as opposed to a particular record (due to the “C” designation in the Context field). Continuing with the Yellow Pages example, consider the scenario in which a user first activates that channel, and has not yet entered a query. If the user had previously set a “search center” location, then the client application might initially display a list of stores nearest that location. But, if the user desires to search for stores in another geographical area, then the user most likely would not select one of those displayed store records. Instead, the user could activate the “Change location” dynamic menu item, which might display a list of zip codes and prompt the user to enter zip code digits until the user sees and activates a desired zip code. The user might then enter a query into the Yellow Pages channel, resulting in the display of a list of stores nearby the user's new “search center” location.
(187) Note that, in the SAMPLE Dynamic Menu HTTP Headers in Table 2, the “Context” field (in one embodiment) has no delimiter, as it is a single-character field followed by another single-character field, the “Processing Type” field, which also has no delimiter, as it is followed by a third single-character field, the “Next Step” field, which has a semicolon (“;”) delimiter to separate it from the following “Menu Item Name” field.
(188) Returning to Table 1, the “Processing Type” field indicates whether, upon activation of the dynamic menu item by the user, the associated action will be performed inside (I) this client application (including invocation of a built-in feature of the user's mobile device, such as placing a phone call) or outside (O) this client application (for example, by launching another client application, such as a web browser or mapping application). In either case, as will be discussed below with respect to the “Action” field shown in Table 1, activation of the dynamic menu item will result in generation of a URI, which will either be transmitted to server 128 (or handled internally, for example, via built-in functionality) or be passed to another client application, such as web browser 120.
(189) Returning to Table 2, it is apparent that many of the actions associated with these headers are performed inside (I) the client application. For example, in addition to the “Add to favorites,” “Change location” and “Search from here” headers, the “Clear location” header in row 6 of Table 2 will also direct the client application to transmit an HTTP request (containing the relevant URI) to server 128 (or, in other embodiments, to third-party servers hosting particular channel functionality). Instead of setting the user's “latlon” variable to a selected “zip code” value (containing the latitude and longitude coordinates corresponding, for example, to a desired zip code), the client application would request that server 128 clear that variable by setting it to a null value. Even the “Click to call” header in row 2 of Table 2 will utilize the client application to invoke built-in functionality of the user's mobile device (in this case, to place a call to a selected item, such as a store or movie theater).
(190) Other headers in Table 2, however, include actions that are intended to be performed outside (O) the client application, for example by invoking another client application, such as a web browser. For example, the “Movie details” header in row 7 of Table 2 directs the client application to construct a URI utilizing various field data (discussed below) and then pass it to a client web browser to retrieve a web page from a third-party web server. Moreover, the “Directions to here” header in row 5 of Table 2 will appear only if the user selects a particular item, which typically will include one or more location fields. In one embodiment, the client application will pass the relevant location information (for the starting “search center” as well as the destination of the selected item) to another client application, such as a web browser, which will retrieve a web page containing relevant directions (and perhaps a map of the route). In another embodiment, a dedicated mapping application could be employed instead of a web browser.
(191) The “Next Step” field in Table 1 is also a single-character field that indicates whether the client application, after it performs the action associated with this dynamic menu header, will perform another action. For example, a “Follow Link” (F) action would instruct the client application to perform the same action that it would have performed had the user activated the selected record. For example, after performing the action associated with the “Click to call” header in row 2 of Table 2 (such as calling the phone number associated with a selected store or other record), the client application will then follow the link associated with that selected item (for example, by passing its associated URL to web browser 120 to retrieve a merchant's web page). In another embodiment, in which client 118 cannot initiate voice and data communications simultaneously, the (F) designation could be ignored.
(192) Other options include a “Refresh Channel” (R) action, in which the current channel is refreshed by virtue of the client application again sending the most recent HTTP request to server 128 (or, in other embodiments, to another third-party server hosting channel data). As a result, server 128 sends back updated results to the client application and the screen is refreshed. A related option is the “Refresh Channel and Clear Search Filter” (S) action, which clears any search filter (such as a multi-prefix search query) from the HTTP request before sending it to server 128.
(193) For example, if a user searched a “Starbucks Store Locator” channel for a store near a particular city, and saw a nearby store in the results list, the user might select that store record and activate “Search from here” dynamic menu item, which would update the user's “search center” based upon the location of that selected store. In that case, however, the user likely would want to see updated search results reflecting the new location, but would not necessarily want those results filtered by any particular city. The “S” designation in the “Search from here” header in row 3 of Table 2 would direct the client to issue a “Refresh” request after removing the existing search filter. Note that, in one embodiment, all of these steps occur without requiring the user to leave the client application, access the web browser or supply a user ID externally.
(194) The fourth and final “Next Step” action is to “Do Nothing” (N), in which case the client application performs only the action specified in the “Action” field shown in Table 1. For example, the “Add to favorites” header in row 1 of Table 2 would simply add the channel or selected record to the user's list of “favorites” (due to the “N” designation in the header's “Next Step” field). In another embodiment, a different “Next Step” action might cause the user's list of “favorites” to appear (for example, as it would when the client application is initially invoked). As noted above, the “Next Step” field, in one embodiment, is delimited by a semicolon (“;”).
(195) The next to last field illustrated in Table 1 is the “Menu Item Name” field which, in one embodiment, is also delimited by a semicolon (“;”) to separate it from the final “Action” field. This “Menu Item Name” field contains the text of the name that will appear in the dynamic menu when it is displayed to the user on the screen of client 118. As noted above, the order of these menu items is determined by the “Header Name” field.
(196) The sixth and final field of the embodiment of a dynamic menu HTTP header illustrated in Table 1 is the “Action” field. This field determines the action that the client application will perform if the dynamic menu item in this header is activated by the user. This field provides a flexible and dynamic mechanism that facilitates the construction of a URI that can be sent to server 128 (or used to invoke a built-in function of the user's mobile device) or passed to another client application, such as browser 120 (depending upon the value of the “Processing Type” field discussed above).
(197) The dynamic features of this Action field, in one embodiment, include the ability to extract data fields associated with a current channel or selected record by referencing a “field number” or “column” with a dollar sign (for example, “$1” for field 1, and so forth). The text in the data field associated with the referenced column replaces the reference (“1”) and is inserted into the URI under construction. Moreover, the URI can include variable names to which a server will assign values, such as the value of a referenced data field (such as “varname=$1”).
(198) For example, the action associated with the “Add to favorites” header in row 1 of Table 2 is a template for a URI the first portion of which (for example, http://live.boopsie.com/service/set/) appears to be a typical HTTP request to server 128 (or, in another embodiment, to another server hosting channel data). Based upon its use of the service/set directory structure, server 128 (in one embodiment) implicitly knows to set variables to specified values based upon the remainder of the URI (following the “?” delimiter, indicating that parameters will follow).
(199) In this case, the remaining portion of the URI consists of three variable assignments separated by “ampersand” (“&”) delimiters, followed by (as noted above) “carriage return/newline” or “\r\n” characters, which serve to separate individual dynamic menu HTTP headers from one another. Thus, the “favorite” variable will be assigned the value contained within “field 1” (in one embodiment, the name of a channel, category or selected record). The “base” variable is used, in one embodiment, to provide a standard reference directory location (stored in “field 0”) to which additional directories can be appended, such as the “uri” (assigned to the value of “field 2”), which might contain the channel-specific location, for example, of the selected favorite channel.
(200) Looking at row 2 of Table 2, this “Click to call” dynamic menu item will perform a special “tel” action that is built into the user's mobile device and accessible from the client application. In one embodiment, the client application would extract the data from “field 4” (for example, the phone number of the selected record) and pass it to the built-in function of the user's mobile device to initiate a phone call. Depending upon the capabilities of this built-in functionality, the phone number might be dialed automatically, or a dialog box might pop up displaying the phone number and asking the user whether to initiate the phone call. As noted above, this functionality can even be invoked without requiring the user to activate the dynamic menu item. For example, if the client application detects that the user pressed the “Talk” button on client 118, it would know to invoke this “Click to call” dynamic menu item due to the presence of the symbolic name “Talk” after the Action field in this header, as shown in row 2 of Table 2.
(201) The “Action” field of the “Search from here” dynamic menu item in row 3 of Table 2 is similar to that of the “Add to favorites” item discussed above. The “name” variable is set to the value of “field 1,” which represents the name of the selected record whose location is being used as the new “search center.” The “latlon” variable is set to the value of “field 3,” which contains the latitude and longitude data defining the location of the selected item. The “response” variable simply indicates, in one embodiment, that the server is to generate a textual response, as opposed to returning a web page.
(202) The “Change location” action in row 4 of Table 2 is a special command, in one embodiment, to enable the current channel to be changed temporarily and then refreshed after the user specifies a new “search center” location. For example, upon activating the “Change location” dynamic menu item, the special URI sent to server 128 requests a temporary change of channel (the data for which is located via that URI) in response to which server 128 sends a list of zip codes (the data corresponding to a “Change location” channel) to be displayed on the client. The user can then search into, select and activate a desired zip code, whereupon the user will be returned to the prior channel, which will be refreshed to reflect the new location.
(203) The “Directions to here” action in row 5 of Table 2 is processed, in one embodiment, outside the client (based on the “I” designation in the “Processing Type” field) and passed to web browser 120 on the user's mobile device. The URI will also include the user's current “search center” location (not shown). In one embodiment, this URI is sent via web browser 120 to a web server on server 128 which, based on the use of the “directions” directory, will set the “latlon” variable to the value of the data extracted into the URI from “field 3,” and use both the “to” and “from” locations passed in the URI to return a web page containing, for example, a map along with textual directions. In one embodiment, server 128 relies upon a third-party web server to return this web page, after passing it the location data.
(204) The “Action” field of the “Clear location” dynamic menu item in row 6 of Table 2 is also similar to that of the “Add to favorites” item discussed above. The “latlon” variable is set to the value of “field 3,” which contains the latitude and longitude data defining the location of the selected item. After setting this variable, server 128 is directed (by the “S” designation in the “Next Step” field) to clear the search filter and refresh the currently selected channel (as described above).
(205) The “Action” field of the “Movie details” dynamic menu item in row 7 of Table 2 is processed outside of the client application (as is the “Directions to here” dynamic menu item). In this case, the user, after querying the AOL Moviefone channel for a desired movie, selects that movie record and activates the “Movie details” dynamic menu item. The client application constructs a relatively complicated URI (explained below) and passes it to web browser 120. In one embodiment, this URI is sent via browser 120 to a third-party site (AOL's Moviefone web site) with a standard HTTP command and a set of parameters (assigning data extracted from channel data columns to specified variables). The “Movie.do” command instructs the Moviefone web server to return a “movie details” web page to browser 120 based upon the specified parameter values.
(206) The “theaterid” variable is set to the data extracted into the URI from “field 6” (containing a unique ID of the theater at which the selected movie is playing). The “movieid” variable is set to the data extracted into the URI from “field 7” (containing a unique ID of the selected movie). The “showtime” variable is set to the data extracted into the URI from “field 8” (defining showtimes for the selected movie). Finally, the “showsynopsis” variable is set to a constant value of “true,” indicating that the selected movie's synopsis should be included with the other movie details.
(207) As noted above, in one embodiment, dynamic menu items are not displayed if data fields referenced in a header's “Action” field (for example, using the “$” replacement mechanism discussed above) are empty. This behavior can be modified, in another embodiment, by including a “question mark” (“?”) character after the “$” character (for example, “$?1”), in which case the dynamic menu item would be displayed even if the referenced data field is empty. Similarly, use of an “exclamation point” (“!”) character (for example, “$!1”) would invert this behavior, and cause the dynamic menu item to be displayed only if the referenced data column is empty. In yet another embodiment, a “percent” (“%”) character (following a “$” or “$?” or “$!” character combination) will direct the client application not to URL-encode the referenced field data.
(208) In still another embodiment, a “$p” character combination is used to reference the mobile device's GPS latitude/longitude coordinates (if GPS functionality is present on the device). An HTTP header sent by server 128, such as “B-GPS: 45.394280, −132.224830,” could inform the client of the current “search center” location (for example, previously set by the user via a “Search from here” dynamic menu item). In another embodiment, client 118 sends a standard “geo.position: lat; Ion” header to server 128 with every request, which server 128 can use, for example, to sort search results. In other embodiments, additional HTTP headers can be employed to cause channel “refreshes” under program control. For example, a “B-Action: refresh=10 sec” header would direct the client to request a refresh of the current channel every 10 seconds. Such a feature could be useful, for example, to obtain updated sporting event scores (perhaps even based upon the time remaining in an event). Similarly, a “B-Action: refresh=0.25 mi” header would direct the client to request a refresh of the current channel whenever the user's mobile phone device had traveled one-quarter of a mile (as indicated by the GPS data). This feature could be useful to update a map, for example, showing the nearest Starbucks locations while the user is traveling, or the nearest “homes for sale” while a realtor is driving across town. Server 128 could also notify client 118 when the user is within a certain distance of a selected destination.
(209) Many other dynamic menu and related features will become apparent in the context of the following discussion of operational aspects of dynamic menus with reference to
(210) C. Dynamic Menu Operation
(211) Referring to
(212) In one embodiment, Window 1102 contains various component display areas, including a small area 1103 for display of real-time and related status information, such as the level of network connectivity to a mobile communications or other network. It also includes a search query field 1104, to facilitate the entry of user queries, including the multi-prefix queries discussed above, as well as a results display area 1105 to display the results of such user queries.
(213) When the client application is initially invoked, results display area 1105 contains a list of various categories of channels, including a user's previously designated “favorite” channels 1106 (as well as links and other previously designated records) and other available channel categories 1107. As noted above, results are provided to client 118 by server 128 (typically in response to user requests), and may be updated over time. In addition, window 1102 may display certain headings, such as the “Favorite Channels” heading 1108, which describes the collection of user-defined “favorites” displayed below heading 1108 (but which cannot, in one embodiment, be selected or activated to perform any additional function).
(214) In one embodiment, window 1102 also includes a “fixed menu” display area 1109 containing certain commonly-used features, such as a “Back” menu item that will refresh window 1102 with the results of the previously entered user query (in one embodiment, by resending the prior user request to server 128 and displaying the updated results of such request). A “Menu” item is also included in display area 1109 to invoke a menu with a set of items that provide additional functionality, as will be explained below. In one embodiment, the “Back” and “Menu” items can be mapped to and invoked by keystrokes or buttons on the user's mobile device.
(215) At this point, a user typically desires to locate a desired channel (for example, in a “first-tier” search) within which desired information can then be located (for example, via a “second-tier” or subsequent-tier query). To facilitate user queries, a user can enter characters into search query field 1104, or simply select and activate a channel or channel category. In either case, client 118 submits such user requests to server 128, which returns a collection of filtered results which client 118 displays in results display area 1105. Examples of such multi-tiered and multi-prefix user queries have been illustrated above in great detail.
(216) In other situations, however, users desire additional functionality beyond that which is afforded by simply entering user queries and activating channel, channel category and intra-channel records. As discussed above, the dynamic menu architecture of the present invention provides such alternative functionality in the context of the user's query and other related state information.
(217) In one embodiment, when the user initially invokes the client application, client 118 sends an HTTP “GET” Request as illustrated in Table 3 below. This request includes the “imenu” function and a reference to the “Home” directory, which is interpreted by server 128 as a request for the initial “top-level” set of channels, categories and favorites that is illustrated in
(218) In response, server 128 also sends a “GET” request, which directs client 118 to display the “list” of data that follows the HTTP headers. Server 128 also informs client 118 that the “Incremental Search” capability is turned “on” (to provide interactive results as the user types characters into search query field 1104 in
(219) The HTTP headers include 3 dynamic menu headers (“Remove from favorites,” “Add to favorites,” and “Refresh”), as well as a “B-Action: skip-empty-links” header that directs the client, while navigating, to skip over rows of data that do not have associated links (for example, to avoid selecting items such as the “Favorite Channels” heading 1108 in
(220) The “Add to favorites” and “Remove from favorites” dynamic menu items will apply only when an item is selected (due to the “I” designation in the “Context” field), and will refresh this top-level collection of channels and categories to update the list of the user's “favorites” (for example, after adding or removing a selected item). The Action fields of these two headers is similar to that explained in the examples above in Table 2, in that it sets the “base,” “favorite,” and “uri” variables to the values of the data in fields 0, 1, and 2, respectively. In addition, the “Remove from favorites” Action field includes a “remove” parameter to enable server 128 to distinguish this request from an “Add to favorites” request.
(221) Note, however, that a third field (“field 3”) is referenced, which is used by client 118 to determine whether to display the “Add to favorites” or “Remove from favorites” dynamic menu item based on whether the user selected an item on the user's list of favorites. For example, as will be discussed below, each record includes (in one embodiment) a “1” in “field 3” if it is on the user's list of favorites. Otherwise, “field 3” is left empty. By using the “$3” designation, the “Remove from favorites” dynamic menu item will be displayed only if “field 3” is non-empty, and thus only if the user has selected an item on the user's list of “favorites.” Conversely, the “Add to favorites” dynamic menu item contains a “$!3” designation, which directs client 118 to display this menu item only if “field 3” is empty, and thus only if the user has selected an item that is not on the user's list of “favorites.”
(222) Following these HTTP headers in Table 3 is the body of the transmitted message containing the list of data to be displayed by client 118 in results display area 1105 of window 1102 shown in
(223) To illustrate how these HTTP headers and associated data records shown in Table 3 are utilized, consider a common scenario illustrated in
(224) Having selected channel 1116, the user can select and activate “Remove from favorites” dynamic menu item 1115a, which will cause client 118 (in accordance with the Action field associated with the “Remove from favorites” header illustrated in Table 3) to construct a URI (extracting information from designated data fields) and send an HTTP request to server 128, which will set the relevant variables (as explained above). It will then issue a “Refresh” request (due to the “R” designation in the “Next Step” field) to server 128 to refresh this “top-level” channel and category list, reflecting the removed record.
(225) If, however, the user selects a record that is not on the user's list of “favorites,” then the “Remove from favorites” item is not contextually relevant and is not displayed (in one embodiment) when the user invokes a dynamic menu. Turning to
(226) As discussed above, client 118 detects that selected “Business” channel category record 1126 is not on the user's list of favorites (based on an empty “field 3”), and thus displays the “Add to favorites” dynamic menu item 1125a (but not the “Remove from favorites” dynamic menu item, due to the “$3” designation in its header). Having selected channel 1126, the user can select and activate “Add to favorites” dynamic menu item 1125a, which will cause client 118 (in accordance with the Action field associated with the “Add to favorites” header illustrated in Table 3) to construct a URI (extracting information from designated data fields) and send an HTTP request to server 128, which will set the relevant variables (as explained above). It will then issue a “Refresh” request (due to the “R” designation in the “Next Step” field) to server 128 to refresh this “top-level” channel and category list, reflecting the added record.
(227) One embodiment of the dynamic menu mechanism illustrated in
(228) TABLE-US-00004 TABLE 3 REQUEST GET /imenu?u=http://live.boopsie.com/i/Home/ HTTP/1.1 UA-OS: WinCE (Smartphone) - Version (5.1); Carrier (none); Boopsie - Version (2.0.2.2) UA-pixels: 320x240 (9 lines) RESPONSE (not logged in) GET /list HTTP/1.1 Incremental-Search: on Content-Length: 1017 B-Menu-Entry-1: IIR; Remove from favorites; http://live.boopsie.com/service/set/?remove&favorite=$1&base=$0&uri=$2&if=$3 B-Menu-Entry-2: IIR; Add to favorites; http://live.boopsie.com/service/set/?favorite=$1&base=$0&uri=$2&if=$!3 B-Menu-Entry-4: BIS; Refresh B-Action: skip-empty-links #fff#008 Favorite Channels CitySearch Silicon Valley i:../CitySearch%20Silicon%20Valley/ 1 Google Gmail http://gmail.com/ 1 Loyola School Directory i:../Loyola%20School%20Directory/ 1 Nokia Music Store i:../Nokia%20Music%20Store/ 1 Wikipedia English The Free Encyclopedia i:../Wikipedia%20English%20The%20Free%20Encyclopedia/ 1 #fff#35a All Channels i:../All%20Channels/ #fff#35a Business i:../Business/ #fff#35a Dating i:../Dating/ #fff#35a Entertainment i:../Entertainment/ #fff#35a Food and Wine i:../Food%20and%20Wine/ #fff#35a Google i:../Google/ #fff#35a Health i:../Health/ #fff#35a How To i:../How%20To/ #fff#35a Local i:../Local/ #fff#35a News i:../News/ #fff#35a Reference i:../Reference/ #fff#35a Religion i:../Religion/ #fff#35a Shopping i:../Shopping/ #fff#35a Social Networking i:../Social%20Networking/ #fff#35a Sports and Recreation i:../Sports%20and%20Recreation/ #fff#35a Store Locator i:../Store%20Locator/ #fff#35a Technical i:../Technical/ #fff#35a Tools i:../Tools/ #fff#35a Travel i:../Travel/
(229) Referring now to
(230) Yet, server 128 detects that the user has not yet logged into the Facebook web site (at least via the client application), and thus cannot yet leverage the client application (including, for example, the interactive multi-prefix, multi-tier and dynamic menu features of the present invention) to obtain user-specific profile information, including information regarding the user's Facebook friends. Although the user could be logged into the Facebook web site via web browser 120, this would not afford the user the benefits of the integrated experience provided by the Facebook Friends channel (described in greater detail below).
(231) In one embodiment, before server 128 delivers to client 118 the “Log into Facebook” page shown in
(232) By leveraging this relatively common API mechanism (and other techniques discussed in greater detail below), server 128 can provide users with a significant degree of interoperability between the client-server application of the present invention and standard web browsers such as web browser 120. For example, because the Facebook web server is aware of server 128 (via the API key), it can deliver to browser 120 the “Log into Facebook” web page shown in
(233) Returning to Table 4, the “GET” request in the “Response” from server 128 is also very similar to the one discussed above and shown in Table 3. The associated data is relatively simple, including only textual directions to the user and a single selectable record with an associated “login” action. The single dynamic menu “Refresh” HTTP header is very similar to the Refresh header shown in Table 3, except that it does not clear the user's search filter (due to the “R” designation in the header's “Next Step” field).
(234) One major difference, however, is the presence of security information, since the user must log into (albeit somewhat indirectly) the actual “Facebook” web site. In one embodiment, server 128 generates a “MOFIID,” which is a form of user or session ID that is specific to the “pairing” of the user and a particular channel, such as the Facebook Friends channel. To enhance security, each user is assigned different authentication credentials with respect to each channel the user accesses (assuming such channels or web sites require user authentication). This strengthens security (as will become apparent below) by preventing multiple web sites from having access to a user's “common” authentication credentials, while still affording server 128 the ability to communicate with the Facebook web server on behalf of the user to obtain user-specific information and provide enhanced functionality to users of both the Facebook web site and the Facebook Friends channel.
(235) The “B-MOFIID: 2w16n9pX5z4cV” header shown in Table 4 provides the user's MOFIID to the client application. In addition, the URI (shown in Table 4) associated with the user's activation of the “Log into Facebook” record (illustrated in
(236) At this point, the user's only effective choice is to activate the “Log into Facebook” link or record 1206 to initiate the login process. In one embodiment, the client application then passes the URI shown in Table 4 to browser 120, which the client application launches to initiate the process of logging the user into the Facebook web site. In response, the Facebook web server delivers to browser 120 the web page 1212 shown in
(237) Web page 1212 includes fields in which the user can enter standard authentication information, including email address or phone number field 1216, password field 1217 and an optional save login info checkbox 1218. After filling in the relevant login info, as illustrated in
(238) At this point, server 128 can utilize the user's MOFIID and session ID to issue requests to the Facebook web server for user-specific information, such as the user's list of friends. However, in one embodiment, rather than leave the user in the web browser interface, the web server on server 128 can respond to the request from browser 120 (for the web page at the “user callback URL” located on server 128) by downloading a “.MOFI” file, which will cause browser 120 to invoke the client application automatically—much in the same way that any downloaded file with an extension to a third-party application (such as “.xls” for Microsoft Excel or “.pdf” for Adobe Acrobat), can cause a web browser to launch that application automatically upon downloading that file.
(239) This non-standard use of a relatively standard mechanism enables the user, after having logged into Facebook via browser 120, to automatically be returned to the client application providing the Facebook Friends channel.
(240) TABLE-US-00005 TABLE 4 REQUEST GET /imenu?u=http://live.boopsie.com/i/Facebook%20Friends/ HTTP/1.1 UA-OS: WinCE (Smartphone) - Version (5.1); Carrier (none); Boopsie - Version (2.0.2.2) UA-pixels: 320x240 (9 lines) RESPONSE (not logged in) GET /list HTTP/1.1 Incremental-Search: on Content-Length: 257 B-MOFIID: 2wl6n9pX5z4Cv B-Action: skip-empty-links B-List-Mode: refreshs B-Menu-Entry-1: BIR; Refresh #fff#3b5998 facebook #fff#6d84b4 please log in Please log in, so that Boopsie for Facebook may load your Friends list. Log into Facebook\thttp://m.facebook.com/login.php ?api_key=4a7075ed59a1884c5e741c13a83c25e0&v=1.0&next=mofiid%3d2wl6nghj5z4cV
(241) When the client application “refreshes” its request for the “Facebook Friends” channel (automatically upon activation, for example, in one embodiment), it reissues the same GET request, now shown in Table 5. However, because server 128 now knows that the user is logged into Facebook, it issues a different response, illustrated in
(242) The HTTP headers shown in Table 5 include the MOFIID data and progress information (indicating, for example, that records 1 to 20 of 97 records have been retrieved), as well as seven dynamic menu HTTP headers that provide functionality specific to the Facebook Friends channel, in addition to the data that follows, which includes a list of the user's friends and identifying information (including a unique “friend ID” that server 128 can use to obtain information specific to a particular “friend” record from the Facebook web server).
(243) Turning to
(244) The dynamic menu HTTP headers shown in Table 5 provide a variety of Facebook-specific functionality. With the exception of the “Refresh” and “Log out” headers, which are performed by the client application, the remaining headers contains URIs that, when constructed, will be passed to browser 120. Yet, using the mechanisms discussed above with respect to the Facebook login process, the client application can be invoked from browser 120, enabling additional functionality to be performed from within the client application, apart from simply issuing a “deep link” and leaving the user in the web browser.
(245) The “My Profile” header references a location on server 128 in which the user's Facebook profile information is stored. The other dynamic menu headers extract the ID of a selected friend (using, for example, the “$2” replacement mechanism discussed above) to enable server 128 to obtain information relating to that friend from the Facebook web server on behalf of the user (using the “session ID” and “MOFIID” as discussed above).
(246) If the user selects a particular friend, such as friend record 1246 shown in
(247) Upon activation of the “Poke friend” dynamic menu item 1245a, the client application constructs the URI (from the Action field shown in Table 5), and passes it to browser 120 (including the “poke” parameter containing the selected friend's user ID extracted from “field 3” of the data shown in Table 5). In one embodiment, after “poking” the selected friend, browser 120 may notify the user that the “poke” was successful and then (using the “.MOFI” technique discussed above) automatically invoke the client application, which will “refresh” the user's list of friends. In another embodiment, the user will remain in the browser 120, but can still return manually to the client application, which will be refreshed automatically.
(248) TABLE-US-00006 TABLE 5 REQUEST (same as before) GET /imenu?u=http://live.boopsie.com/i/Facebook%20Friends/ HTTP/1.1 UA-OS: WinCE (Smartphone) - Version (5.1); Carrier (none); Boopsie - Version (2.0.2.2) UA-pixels: 320x240 (9 lines) RESPONSE (logged in) GET /list HTTP/1.1 Incremental-Search: on Content-Length: 1140 B-MOFIID: 2wl6n9pX5z4cV B-Action: skip-empty-links B-Progress: 1 to 20 of 97 B-Menu-Entry-1: ION; Add to friends; http://live.boopsie.com/host/facebookfriends/?add=$4 B-Menu-Entry-2: ION; Poke friend; http://live.boopsie.com/host/facebookfriends/?poke=$3 B-Menu-Entry-3: ION; Message friend; http://live.boopsie.com/host/facebookfriends/?message=$3 B-Menu-Entry-4: ION; Wall of friend; http://live.boopsie.com/host/facebookfriends/?wall=$2 B-Menu-Entry-5: BON; My profile; http://live.boopsie.com/host/facebookfriends/?profile B-Menu-Entry-6: BIS; Refresh B-Menu-Entry-7: BIR; Log out; http://live.boopsie.com/host/facebookfriends/?logout #fff#3b5998 facebook #fff#6d84b4 97 friends (1 to 20 of 97) Aaron Levie | Box.net / USC / Silicon Valley, CA 3402659 3402659 Adam Fritzler | BitTorrent, Inc. / San Francisco, CA 545323645 545323645 Adriane Rose | RIT / CCRI 24416529 24416529 Alex Feinberg | Santa Clara / Yahoo! / Silicon Valley, CA 7305243 7305243 Allan Pichler | 651958736 651958736 Andy Wick | Virginia Tech / Washington, DC 691927740 691927740 Ardy F. | Silicon Valley, CA 512018645 512018645 Bahram Afshari | Silicon Valley, CA / Stanford 681147213 681147213 Barbara Meier | Brown / Providence, RI 1013164 1013164 Brad Cleveland | Silicon Valley, CA 587478487 587478487 Brad Kay.Goodman | Boston, MA 713076764 713076764 Brian Greenberg | East Bay, CA 593872292 593872292
(249) The user might also desire to filter a large list of friends to locate a desired friend. For example, the user might enter a “d m” multi-prefix query into search query field 1254 in
(250) If the user selects friend record 1266 shown in window 1262 in
(251) Upon activation of the “Message friend” dynamic menu item 1265a, the client application constructs the URI (from the Action field shown in Table 6), and passes it to browser 120 (including the “message” parameter containing the selected friend's user ID extracted from “field 3” of the data shown in Table 6). In one embodiment, after “messaging” the selected friend, browser 120 may notify the user that the “message” was sent successfully and then (using the “.MOFI” technique discussed above) automatically invoke the client application, which will “refresh” the user's list of friends. In another embodiment, the user will remain in the browser 120, but can still return manually to the client application, which will be refreshed automatically.
(252) Turning to Table 6, it can be seen that the “GET” request has changed only slightly to reflect the search query (“c=d+m”) and to employ a “wwu” (instead of an “imenu”) command, which is a relatively minor implementation decision. The dynamic menu HTTP headers have not changed in response to the user's query (though, in other embodiments, they could be modified under control of server 128 to reflect a different state or context). Finally, the filtered set of results (4 “friend” records) are included for display by client 118, as shown in
(253) TABLE-US-00007 TABLE 6 REQUEST (with filter “d m”) GET /wwu?c=d+m&u=http://live.boopsie.com/i/Facebook%20Friends/ HTTP/1.1 UA-OS: WinCE (Smartphone) - Version (5.1); Carrier (none); Boopsie - Version (2.0.2.3) UA-pixels: 320x240 (9 lines) RESPONSE GET /list HTTP/1.1 Incremental-Search: on Content-Length: 305 B-MOFIID: 2wl6n9pX5z4cV B-Action: skip-empty-links B-Progress: 1 to 4 of 4 B-Menu-Entry-1: ION; Add to friends; http://live.boopsie.com/host/facebookfriends/?add=$4 B-Menu-Entry-2: ION; Poke friend; http://live.boopsie.com/host/facebookfriends/?poke=$3 B-Menu-Entry-3: ION; Message friend; http://live.boopsie.com/host/facebookfriends/?message=$3 B-Menu-Entry-4: ION; Wall of friend; http://live.boopsie.com/host/facebookfriends/?wall=$2 B-Menu-Entry-5: BON; My profile; http://live.boopsie.com/host/facebookfriends/?profile B-Menu-Entry-6: BIS; Refresh B-Menu-Entry-7: BIR; Log out; http://live.boopsie.com/host/facebookfriends/?logout #fff#3b5998 facebook #fff#6d84b4 4 friends Dan Manheim | Los Angeles, CA/UCLA/Threshold Marketing 596495304 596495304 Dave McNabola | Austin, TX / Duke 1079384606 1079384606 Denis Ford | Seattle, WA/ Microsoft 757528454 757528454 Douglas Cheline | Thunderbird School of Global Management 293500041 293500041
(254) From the above descriptions of the various embodiments of the interactive, multi-prefix, multi-tier and dynamic menu aspects of the present invention, many additional features and applications of these techniques will become apparent. For example, as noted above, these techniques could be incorporated wholly within a web browser (such as Firefox Mobile) or an integrated or standalone search engine (such as Google). One or more channels could be searchable, or simply selected from a list of “smart bookmarks.” Moreover, a vertical web site or sites (such as Amazon, Wikipedia or IMDB) could provide various combinations of these features as a standalone application containing one or more channels.
(255) Multiple channels could be searched at one time, particularly if they are related, and dynamic menus could be employed to perform functions and retrieve information from channels/web sites in advance of relying upon a client web browser. Moreover, the interoperability between a client application and a client web browser, as discussed above, greatly enhances the user's experience by enabling the user to switch between these applications when the particular context makes one or the other more useful or desirable.
(256) In a mobile communications environment, the advantages of interactive multi-prefix queries, particularly when targeted across one or more tiers of channels, are quite significant. Avoiding multiple web page refreshes and links, providing results quickly and interactively and enabling users to minimize data entry is of great importance in such a resource-constrained environment. Moreover, adding contextual functionality such as dynamic menus that can vary among channels and even individual records or program states (particularly when deployed using a thin-client server-controlled architecture), significantly enhances these advantages, by providing a high degree of context-specific functionality while minimizing iterations among resource-intensive steps such as following links or refreshing web pages.
(257) Some portions of above description describe the embodiments in terms of algorithms and symbolic representations of operations on information. These algorithmic descriptions and representations are commonly used by those skilled in the data processing arts to convey the substance of their work effectively to others skilled in the art. These operations, while described functionally, computationally or logically, are understood to be implemented by computer programs or equivalent electrical circuits, microcode, or the like. Furthermore, it has also proven convenient at times, to refer to these arrangements of operations as modules, without loss of generality. The described operations and their associated modules may be embodied in software, firmware, hardware, or any combinations thereof.
(258) As used herein any reference to “one embodiment” or “an embodiment” means that a particular element, feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment.
(259) Some embodiments may be described using the expression “coupled” and “connected” along with their derivatives. It should be understood that these terms are not intended as synonyms for each other. For example, some embodiments may be described using the term “connected” to indicate that two or more elements are in direct physical or electrical contact with each other. In another example, some embodiments may be described using the term “coupled” to indicate that two or more elements are in direct physical or electrical contact. The term “coupled,” however, may also mean that two or more elements are not in direct contact with each other, but yet still co-operate or interact with each other. The embodiments are not limited in this context.
(260) As used herein, the terms “comprises,” “comprising,” “includes,” “including,” “has,” “having” or any other variation thereof, are intended to cover a non-exclusive inclusion. For example, a process, method, article, or apparatus that comprises a list of elements is not necessarily limited to only those elements but may include other elements not expressly listed or inherent to such process, method, article, or apparatus. Further, unless expressly stated to the contrary, “or” refers to an inclusive or and not to an exclusive or. For example, a condition A or B is satisfied by any one of the following: A is true (or present) and B is false (or not present), A is false (or not present) and B is true (or present), and both A and B are true (or present).
(261) In addition, use of the “a” or “an” are employed to describe elements and components of the embodiments herein. This is done merely for convenience and to give a general sense of the invention. This description should be read to include one or at least one and the singular also includes the plural unless it is obvious that it is meant otherwise.
(262) Upon reading this disclosure, those of skill in the art will appreciate still additional alternative structural and functional designs for a system and a process for providing multi-prefix, interactive search capabilities on a mobile communications device through the disclosed principles herein. Thus, while particular embodiments and applications have been illustrated and described, it is to be understood that the disclosed embodiments are not limited to the precise construction and components disclosed herein. Various modifications, changes and variations, which will be apparent to those skilled in the art, may be made in the arrangement, operation and details of the method and apparatus disclosed herein without departing from the spirit and scope defined in the appended claims.