DETAILED ACTION
This office action is in response to the communication filed on April 07, 2026. Claims 1-20 are currently pending.
Notice of Pre-AIA or AIA Status
The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA .
Response to Arguments
Applicant's arguments filed on April 06, 2026 have been fully considered but they are not persuasive for the following reasons:
Applicant in Pages 9-11 of the Remarks argues that Goel, Bhotika, and Deep do not teach or suggest the amended features “identifying an item identifier (ID) of said each vector, wherein the chunk corresponding to said each vector is a chunk of an item identified by the item ID of said each vector, and receiving identifications of a plurality of vectors, each vector of the plurality of vectors corresponding to a different chunk of a plurality of chunks”, as recited in amended independent claim 1 and similarly recited in amended independent claim 12.
Examiner respectfully disagrees. The previously cited prior art alone and/or in combination discloses the argued features.
In response to applicant's arguments against the references individually, one cannot show nonobviousness by attacking references individually where the rejections are based on combinations of references. See In re Keller, 642 F.2d 413, 208 USPQ 871 (CCPA 1981); In re Merck & Co., 800 F.2d 1091, 231 USPQ 375 (Fed. Cir. 1986).
Goel in [0013] and [0014] discloses vector database providing storage and data search and retrieval for vectors in response to a user query, preprocess vector database to create an index for querying, for a given query vector using the index to identify a set of vectors that are close to the query vector.
Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions.
Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object.
Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage.
Therefore, Goel discloses the argued features “identifying an item identifier (ID) of said each vector, wherein the chunk corresponding to said each vector is a chunk of an item identified by the item ID of said each vector, and receiving identifications of a plurality of vectors, each vector of the plurality of vectors corresponding to a different chunk of a plurality of chunks”.
Applicant in Pages 11-12 of the Remarks argues that the claims are directed to patent-eligible subject matter because they improve the functioning of a computer.
Examiner respectfully disagrees.
It is important to note that the judicial exception alone cannot provide the improvement. The improvement can be provided by one or more additional elements (MPEP 2106.05(a)).
Similarly, "claiming the improved speed or efficiency inherent with applying the abstract idea on a computer" does not integrate a judicial exception into a practical application or provide an inventive concept (MPEP 2106.05(f)).
Independent claims 1 and 12 covers several steps, such as the searching, identifying, and determining steps, that recite an abstract idea within the “Mental Processes” grouping of abstract ideas, because a person can mentally or using a pen and paper perform the limitations recited in said steps, which is discussed in detail in the current 101 rejection below.
The remaining steps in the claims that are identified as reciting additional elements, such as the receiving, maintaining, and storing steps in claims 1 and 12, are only adding insignificant extra-solution activity to the judicial exception, are recognized as a well understood, routine, and conventional activity within the field of computer functions, and are applying the exception using generic computer components, which is not sufficient to amount to significantly more than the judicial exception and are not directed to any specific improvement in computer technology.
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
For the above reasons, Examiner states that rejection of the current Office action is proper.
Claim Rejections - 35 USC § 101
35 U.S.C. 101 reads as follows:
Whoever invents or discovers any new and useful process, machine, manufacture, or composition of matter, or any new and useful improvement thereof, may obtain a patent therefor, subject to the conditions and requirements of this title.
Claims 1-20 are rejected under 35 U.S.C. 101 because the claimed invention is directed to an abstract idea without significantly more.
At step 1:
Independent claims 1 and 12 respectively recite a method and one or more non-transitory storage media, which are directed to a statutory category such as a process, machine, or an article of manufacture.
At step 2A, prong one:
Independent claim 1 and similarly independent claim 12 recites the limitation:
“while searching a Hierarchical Navigable Small Worlds (HNSW) index based on the query vector”:
A person can mentally or using a pen and paper search a Hierarchical Navigable Small Worlds (HNSW) index based on a query vector.
“for each vector of the plurality of vectors:
identifying an item identifier (ID) of said each vector, wherein the chunk corresponding to said each vector is a chunk of an item identified by the item ID of said each vector;
identifying an item-chunk queue, from among the plurality of item-chunk queues, that corresponds to the item ID; and
determining whether said each vector is to be added to the item-chunk queue”;
For each vector of a plurality of vectors, a person can mentally or using a pen and paper identify an item identifier (ID) of each vector of the plurality of vectors, wherein a chunk corresponding to said each vector is a chunk of an item identified by the item ID of said each vector, the person can mentally or using a pen and paper identify an item-chunk queue, from among a plurality of item-chunk queues, that corresponds to an item ID, and the person can mentally or using a pen and paper determine whether each vector is to be added to the item-chunk queue.
“for at least one vector, of the plurality of vectors, that corresponds to the particular item ID,
determining to add the at least one vector to the particular item-chunk queue that corresponds to the particular item ID; and
in response to determining to add the at least one vector to the particular item-chunk queue, determining whether to update the item results queue based on the at least one vector”;
For at least one vector, of a plurality of vectors, that corresponds to a particular item ID a person can mentally or using a pen and paper determine to add the at least one vector to a particular item-chunk queue that corresponds to the particular item ID, and in response to determining to add the at least one vector to the particular item-chunk queue the person can mentally or using a pen and paper determine whether to update an item results queue based on the at least one vector.
The limitations, as recited above, are processes that, under their broadest reasonable interpretation, cover steps that can be performed in the human mind or by a human using a pen and paper, but for recitation of generic computer components.
If a claim limitation, under its broadest reasonable interpretation, covers performance of the limitation in the mind but for the recitation of generic computer components, then it falls within the “Mental Processes” grouping of abstract ideas. Accordingly, the claims recite an abstract idea.
At step 2A, prong two:
This judicial exception is not integrated into a practical application.
Independent claim 1 and similarly independent claim 12 recites the limitations:
“receiving a vector query that includes a query vector”, which is a step of receiving data. The step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity (MPEP 2106.05(g)).
“maintaining a plurality of item-chunk queues, an item map, and an item results queue”, which is a step of maintaining or storing data. The step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity (MPEP 2106.05(g)).
“receiving, based on the query vector, identifications of a plurality of vectors, each vector of the plurality of vectors corresponding to a different chunk of a plurality of chunks”, which is a step of receiving data. The step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity (MPEP 2106.05(g)).
“storing a particular item ID in an entry, of the item map, that references a particular item-chunk queue of the plurality of item-chunk queues”, which is a step of storing data. The step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity (MPEP 2106.05(g)).
The additional elements “a plurality of item-chunk queues”, “an item map”, “an item results queue”, “a Hierarchical Navigable Small Worlds (HNSW) index”, “a plurality of chunks”, and “wherein the method is performed by one or more computing devices” in the steps in claim 1 are recited at a high-level of generality, such that it amounts to no more than mere instructions to apply the exception using generic computer components.
The additional elements “one or more non-transitory storage media storing one or more sequences of instructions which, when executed by one or more computing devices, cause:”, “a plurality of item-chunk queues”, “an item map”, “an item results queue”, “a Hierarchical Navigable Small Worlds (HNSW) index”, “a plurality of chunks”, and “wherein the method is performed by one or more computing devices” in the steps in claim 12 are recited at a high-level of generality, such that it amounts to no more than mere instructions to apply the exception using generic computer components.
Accordingly, the additional elements, individually or in combination, do not
integrate the abstract idea into a practical application, even viewing the claims a whole,
because it does not impose any meaningful limits on practicing the abstract idea.
At step 2B:
Independent claims 1 and 12 recites the same additional elements as
identified in step 2A prong two above. These additional elements are not sufficient to
amount to significantly more than the judicial exception.
Independent claim 1 and similarly independent claim 12 recites the limitations:
“receiving a vector query that includes a query vector”, which is a step of receiving data, and is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of receiving or transmitting data over a network (MPEP 2106.05(d)(II)(i)).
“maintaining a plurality of item-chunk queues, an item map, and an item results queue”, which is a step of maintaining or storing data, and is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of storing and retrieving information in memory (MPEP 2106.05(d)(II)(iv)).
“receiving, based on the query vector, identifications of a plurality of vectors, each vector of the plurality of vectors corresponding to a different chunk of a plurality of chunks”, which is a step of receiving data, and is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of receiving or transmitting data over a network (MPEP 2106.05(d)(II)(i)).
“storing a particular item ID in an entry, of the item map, that references a particular item-chunk queue of the plurality of item-chunk queues”, which is a step of storing data, and is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of storing and retrieving information in memory (MPEP 2106.05(d)(II)(iv)).
Accordingly, the additional limitations are not sufficient to amount to significantly more than the judicial exception. Therefore, the claims are directed to an abstract idea and are not patent eligible.
Dependent claim 2 and similarly dependent claim 13 recites additional limitations, such as:
“in response to determining to update the item results queue based on the at least one vector, adding, to the item results queue, an entry that includes the particular item ID and a value that indicates a vector distance between the at least one vector and the query vector”, which is a step of adding or storing data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of storing and retrieving information in memory (MPEP 2106.05(d)(II)(iv)).
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 3 and similarly dependent claim 14 recites additional limitations, such as:
“wherein determining whether said each vector is to be added to the item-chunk queue comprises for a particular vector of each said vector,
determining whether a first vector distance between the particular vector and the query vector is less than a second vector distance between a vector in the item-chunk queue and the query vector;
determining whether a number of vectors in the item-chunk queue exceeds a threshold value”;
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper determine whether each vector is to be added to an item-chunk queue by mentally or using a pen and paper determining, for a particular vector of each vector, whether a first vector distance between the particular vector and a query vector is less than a second vector distance between a vector in the item-chunk queue and the query vector, the person can mentally or using a pen and paper determine whether a number of vectors in the item-chunk queue exceeds a threshold value, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
“replacing an existing vector in the item-chunk queue with the particular vector in response to determining the first vector distance is less than the second vector distance and the number of vectors in the item-chunk queue exceeds the threshold value”, which is a step of replacing or updating data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data manipulation, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of electronic recordkeeping (MPEP 2106.05(d)(II)(iii)).
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 4 and similarly dependent claim 15 recites additional limitations, such as:
“determining that the item results queue contains an entry that includes the particular item ID”;
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper determine that an item results queue contains an entry that includes a particular item ID, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
“in response to determining to update the item results queue based on the at least one vector and determining that the item results queue contains an entry that includes the particular item ID, replacing, in the entry, a first value with a second value that indicates a vector distance between the at least one vector and the query vector”, which is a step of replacing or updating data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data manipulation, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of electronic recordkeeping (MPEP 2106.05(d)(II)(iii)).
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 5 and similarly dependent claim 16 recites additional limitations, such as:
“determining that a number of entries in the particular item-chunk queue that corresponds to the particular item ID exceeds a threshold value”;
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper determine that a number of entries in a particular item-chunk queue that corresponds to a particular item ID exceeds a threshold value, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
“adding an entry corresponding to the particular item ID in the item results queue in response to the number of entries in the particular item-chunk queue exceeding the threshold value”, which is a step of adding or storing data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of storing and retrieving information in memory (MPEP 2106.05(d)(II)(iv)).
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 6 and similarly dependent claim 17 recites additional limitations, such as:
“storing a second item ID in a second entry, of the item map, that references a second item-chunk queue of the plurality of item-chunk queues”, which is a step of storing data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of storing and retrieving information in memory (MPEP 2106.05(d)(II)(iv)).
“wherein the item results queue does not include an entry for the second item ID”, which is a step of storing data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of storing and retrieving information in memory (MPEP 2106.05(d)(II)(iv)).
“for a second vector, of the plurality of vectors, that corresponds to a second item ID, in response to determining to add the second vector to the second item-chunk queue that corresponds to the second item ID, determining whether to add, to the item results queue, a particular entry for the second item ID”;
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper determine, for a second vector, of a plurality of vectors, that corresponds to a second item ID, and in response to determining to add the second vector to a second item-chunk queue that corresponds to the second item ID, whether to add, to an item results queue, a particular entry for the second item ID, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
“wherein determining to add, to the item results queue, a particular entry for the second item ID comprises performing a comparison between a number of entries in the item results queue with a threshold value”.
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper determine to add, to an item results queue, a particular entry for a second item ID by mentally or using a pen and paper performing a comparison between a number of entries in the item results queue with a threshold value, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 7 and similarly dependent claim 18 recites additional limitations, such as:
“based on the comparison, determining that the number of entries is equal to the threshold value”;
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper determine, based on a comparison, that a number of entries is equal to a threshold value, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
“in response to determining the number of entries is equal to the threshold value, determining whether the particular entry can replace the one of the entries in the item results queue”.
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper determine whether a particular entry can replace one of the entries in an item results queue in response to mentally or using a pen and paper determining that a number of entries is equal to a threshold value, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 8 recites additional limitations, such as:
“in response to determining that the particular entry can replace a certain entry in the item results queue, replacing, in the item results queue, the certain entry with the particular entry”, which is a step of replacing or updating data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data manipulation, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of electronic recordkeeping (MPEP 2106.05(d)(II)(iii)).
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 9 recites additional limitations, such as:
“determining that the particular entry cannot replace a certain entry in the item results queue”;
These limitations are directed to the same abstract idea under the mental processes grouping as independent claim 1, because a person can mentally or using a pen and paper determine that a particular entry cannot replace a certain entry in an item results queue, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
“in response to determining the particular entry cannot replace a certain entry in the item results queue and in response to the comparison, determining to cease exploring the HSNW index for additional vectors”.
These limitations are directed to the same abstract idea under the mental processes grouping as independent claim 1, because a person can mentally or using a pen and paper determine to cease exploring a HSNW index for additional vectors in response to mentally or using a pen and paper determining a particular entry cannot replace a certain entry in an item results queue and in response to a comparison, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 10 and similarly dependent claim 19 recites additional limitations, such as:
“allocating a new item-chunk queue for a certain item ID in response to determining no existing item-chunk queue corresponds to the certain item ID”, which is a step of storing data.
At step 2A prong two, the step is recited at a high level of generality, and amounts to mere data gathering, which is a form of insignificant extra-solution activity.
At step 2B, the step is recognized as a well understood, routine, and conventional activity within the field of computer functions as an element of storing and retrieving information in memory (MPEP 2106.05(d)(II)(iv)).
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Dependent claim 11 and similarly dependent claim 20 recites additional limitations, such as:
“wherein identifying the item ID comprises referencing a covering column corresponding to each vector, wherein a vector source array includes a pointer that references covering column storage for each vector”.
These limitations are directed to the same abstract idea under the mental processes grouping as independent claims 1 and 12, because a person can mentally or using a pen and paper identify an item ID by mentally or using a pen and paper referencing a covering column corresponding to each vector, wherein a vector source array includes a pointer that references covering column storage for each vector, and because the limitations do not recite any additional elements that are sufficient to amount to significantly more.
Accordingly, the additional elements, individually or in combination, do not integrate the abstract idea into a practical application, even viewing the claims a whole, because it does not impose any meaningful limits on practicing the abstract idea.
Accordingly, dependent claims 2-11 and 13-20 are also directed to abstract idea without significantly more and are not patent eligible.
Claim Rejections - 35 USC § 103
In the event the determination of the status of the application as subject to AIA 35 U.S.C. 102 and 103 (or as subject to pre-AIA 35 U.S.C. 102 and 103) is incorrect, any correction of the statutory basis (i.e., changing from AIA to pre-AIA ) for the rejection will not be considered a new ground of rejection if the prior art relied upon, and the rationale supporting the rejection, would be the same under either status.
The following is a quotation of 35 U.S.C. 103 which forms the basis for all obviousness rejections set forth in this Office action:
A patent for a claimed invention may not be obtained, notwithstanding that the claimed invention is not identically disclosed as set forth in section 102, if the differences between the claimed invention and the prior art are such that the claimed invention as a whole would have been obvious before the effective filing date of the claimed invention to a person having ordinary skill in the art to which the claimed invention pertains. Patentability shall not be negated by the manner in which the invention was made.
Claim(s) 1-20 is/are rejected under 35 U.S.C. 103 as being unpatentable over Goel (US Pub 2024/0168978) in view of Bhotika (US Pub 2020/0160050) and in further view of Deep (US Pat 12,039,770).
With respect to claim 1, Goel discloses a method comprising:
receiving a vector query that includes a query vector (Goel in [0013] and [0014] discloses vector database providing storage and data search and retrieval for vectors in response to a user query, preprocess vector database to create an index for querying, for a given query vector using the index to identify a set of vectors that are close to the query vector);
maintaining a plurality of item-chunk…, an item map, and an item results… (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; here Goel does not explicitly disclose queues, but the Bhotika reference discloses the feature, as discussed below); and
while searching a…index based on the query vector (Goel in [0013] and [0014] discloses vector database providing storage and data search and retrieval for vectors in response to a user query, preprocess vector database to create an index for querying, for a given query vector using the index to identify a set of vectors that are close to the query vector; here Goel does not explicitly disclose accessing a HNSW index, but the Deep reference discloses the feature, as discussed below):
receiving, based on the query vector, identifications of a plurality of vectors, each vector of the plurality of vectors corresponding to a different chunk of a plurality of chunks (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage);
for each vector of the plurality of vectors (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage):
identifying an item identifier (ID) of said each vector, wherein the chunk corresponding to said each vector is a chunk of an item identified by the item ID of said vector (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage);
identifying an item-chunk…, from among the plurality of item-chunk…, that corresponds to the item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage); and
determining whether said each vector is to be added to the item-chunk… (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage);
storing a particular item ID in an entry, of the item map, that references a particular item-chunk…of the plurality of item-chunk… (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage); and
for at least one vector, of the plurality of vectors, that corresponds to the particular item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage),
determining to add the at least one vector to the particular item-chunk… that corresponds to the particular item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage); and
in response to determining to add the at least one vector to the particular item-chunk…, determining whether to update the item results…based on the at least one vector (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage);
wherein the method is performed by one or more computing devices (Goel in [0042] and [0043] discloses method performed by one or more computing devices).
Goel discloses maintaining item chunks and item results, however, Goel does not explicitly disclose
…a plurality of item-chunk queues…and an item results queue;
The Bhotika reference discloses a plurality of item-chunk queues and an item results queue (Bhotika in [0036] and [0037] discloses chunks added to a chunk added queue; Bhotika in [0036] and [0038] discloses storing chunk results in a chunk completed queue).
Therefore, it would have been obvious to a person of ordinary skill in the art, before the effective filing date of the claimed invention, having the teachings of Goel and Bhotika, to have combined Goel and Bhotika. The motivation to combine Goel and Bhotika would be to enable complex processing of documents by maintaining document chunks and chunk analysis results in queues (Bhotika: [0017], [0036], and [0038])).
Goel discloses accessing an index based on query vectors, however, Goel and Bhotika do not explicitly disclose:
…accessing a Hierarchical Navigable Small Worlds (HNSW) index…;
The Deep reference discloses accessing a Hierarchical Navigable Small Worlds (HNSW) index (Deep in Column 3 line 25 – Column 4 line 39 discloses a spatial index enabling efficient similarity based searches of embedding vectors or objects within a database, a partition map for the special index is consulted to identify target resources which have relevant partitions of the special index; Column 5 line 53 – Column 6 line 14 discloses a set of one or more query targets to which index partition requests pertaining to a first embedding vector are to be directed are identified using an index partition map, query targets comprise a stored spatial index, employing hierarchical navigable small world (HNSW) for the spatial index).
Therefore, it would have been obvious to a person of ordinary skill in the art, before the effective filing date of the claimed invention, having the teachings of Goel, Bhotika, and Deep, to have combined Goel, Bhotika, and Deep. The motivation to combine Goel, Bhotika, and Deep would be to enable efficient similarity based searches using a spatial index (Deep: Column 3 lines 25-45).
With respect to claim 2, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 1, further comprising:
in response to determining to update the item results queue based on the at least one vector, adding, to the item results queue, an entry that includes the particular item ID and a value that indicates a vector distance between the at least one vector and the query vector (Bhotika in [0036] and [0038] discloses updating entries in the queue based on result; Bhotika in [0030] and [0133] identify results such as a unique identifier for a block, relationship between the block and other blocks, generating a job identifier for a job associated with a request, receiving response associated with the identifier; Bhotika in [0096] discloses identifying smallest distance between feature vectors or one or multiple clusters).
With respect to claim 3, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 1, wherein determining whether said each vector is to be added to the item-chunk queue comprises for a particular vector of each said vector,
determining whether a first vector distance between the particular vector and the query vector is less than a second vector distance between a vector in the item-chunk queue and the query vector (Goel in [0014] and [0079] discloses Euclidean distance to establish similarity by measuring straight-line distance between vectors, using updated vector to compute the distance; Bhotika in [0096] discloses identifying smallest distance between feature vectors or one or multiple clusters);
determining whether a number of vectors in the item-chunk queue exceeds a threshold value (Goel in [0019] discloses once 10,000 new vectors are added corresponding to an index inside an intermediate data storage, all the vectors are re-indexed and the vectors are transferred to a primary storage; Goel in [0057] and [0080] discloses objects in the data storage modified after a certain threshold of number of operations or days to incorporate the changes into the index, periodically re-indexing whenever a certain configurable threshold of number of operations in data storage and time is reached; Bhotika in [0044] and [0128] discloses once a chunk failed processing more than some threshold number of times, it can be added to a dead letter queue, thresholds configured to prevent processing of large data; Deep in Column 4 lines 6-21 discloses if an object is recognized with a probability or confidence level higher than a selected threshold within a cache, a recognition-based action may be initiated; Deep in Column 5 line 35 to Column 6 line 14 discloses a threshold similarity criterion may be a tunable parameter, index partition map used to eliminate partitions which are unlikely to include embedding vectors which satisfy the similarity threshold from the spatial index); and
replacing an existing vector in the item-chunk queue with the particular vector in response to determining the first vector distance is less than the second vector distance and the number of vectors in the item-chunk queue exceeds the threshold value (Goel in [0019] discloses once 10,000 new vectors are added corresponding to an index inside an intermediate data storage, all the vectors are re-indexed and the vectors are transferred to a primary storage; Goel in [0057] and [0080] discloses objects in the data storage modified after a certain threshold of number of operations or days to incorporate the changes into the index, periodically re-indexing whenever a certain configurable threshold of number of operations in data storage and time is reached; Bhotika in [0044] and [0128] discloses once a chunk failed processing more than some threshold number of times, it can be added to a dead letter queue, thresholds configured to prevent processing of large data; Deep in Column 4 lines 6-21 discloses if an object is recognized with a probability or confidence level higher than a selected threshold within a cache, a recognition-based action may be initiated; Deep in Column 5 line 35 to Column 6 line 14 discloses a threshold similarity criterion may be a tunable parameter, index partition map used to eliminate partitions which are unlikely to include embedding vectors which satisfy the similarity threshold from the spatial index).
With respect to claim 4, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 1, further comprising:
determining that the item results queue contains an entry that includes the particular item ID; and
in response to determining to update the item results queue based on the at least one vector and determining that the item results queue contains an entry that includes the particular item ID, replacing, in the entry, a first value with a second value that indicates a vector distance between the at least one vector and the query vector (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 5, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 1, further comprising:
determining that a number of entries in the particular item-chunk queue that corresponds to the particular item ID exceeds a threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result); and
adding an entry corresponding to the particular item ID in the item results queue in response to the number of entries in the particular item-chunk queue exceeding the threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 6, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 1, further comprising:
storing a second item ID in a second entry, of the item map, that references a second item-chunk queue of the plurality of item-chunk queues (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result);
wherein the item results queue does not include an entry for the second item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result);
for a second vector, of the plurality of vectors, that corresponds to a second item ID, in response to determining to add the second vector to the second item-chunk queue that corresponds to the second item ID, determining whether to add, to the item results queue, a particular entry for the second item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result);
wherein determining to add, to the item results queue, a particular entry for the second item ID comprises performing a comparison between a number of entries in the item results queue with a threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 7, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 6, further comprising:
based on the comparison, determining that the number of entries is equal to the threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result); and
in response to determining the number of entries is equal to the threshold value, determining whether the particular entry can replace the one of the entries in the item results queue (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 8, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 7, further comprising:
in response to determining that the particular entry can replace a certain entry in the item results queue, replacing, in the item results queue, the certain entry with the particular entry (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 9, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 7, further comprising:
determining that the particular entry cannot replace a certain entry in the item results queue (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage Bhotika in [0036] and [0038] discloses updating entries in the queue based on result); and
in response to determining the particular entry cannot replace a certain entry in the item results queue and in response to the comparison, determining to cease exploring the HSNW index for additional vectors (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 10, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 1, further comprising allocating a new item-chunk queue for a certain item ID in response to determining no existing item-chunk queue corresponds to the certain item ID (Goel in [0018] and [0019] discloses anytime new vectors are inserted, updated, and/or deleted, the vector database in re-indexed and new clusters are computed, once 10,000 new vectors are added corresponding to an index inside an intermediate data storage, all the vectors are re-indexed and the vectors are transferred to a primary storage; Goel in [0039] and [0040] discloses index metadata provides a list of existing indexes in the vector database, index metadata having metadata information including attributes, such as an index name, tenant id, index type, default query parameters, and a version of the index, index metadata table helping in mapping the index with vectors/objects to be fetched; Goel in [0069] discloses determining if a vector exists or not in an index map; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 11, Goel in view of Bhotika and in further view of Deep discloses the method of Claim 1, wherein identifying the item ID comprises referencing a covering column corresponding to each vector, wherein a vector source array includes a pointer that references covering column storage for each vector (Goel in [0013] discloses vector data includes a series of floating data points used to represent various types of data, an array of data points or vectors stored in a vector database designed to provide, in addition to storage, data search and retrieval facilities for vectors in response to user query; Goel in [0039] and [0040] discloses data storage includes tables indicating index metadata and vector operations, index metadata provides a list of existing indexes in the vector database, index metadata having metadata information including attributes, such as an index name, tenant id, index type, default query parameters, and a version of the index, index metadata table helping in mapping the index with vectors/objects to be fetched).
With respect to claim 12, Goel discloses one or more non-transitory storage media storing one or more sequences of instructions which, when executed by one or more computing devices (Goel in [0043] and [0088] discloses steps performed by computing devices and executed based on instructions stored in a non-transitory computer readable medium), cause:
receiving a vector query that includes a query vector (Goel in [0013] and [0014] discloses vector database providing storage and data search and retrieval for vectors in response to a user query, preprocess vector database to create an index for querying, for a given query vector using the index to identify a set of vectors that are close to the query vector);
maintaining a plurality of item-chunk…, an item map, and an item results… (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; here Goel does not explicitly disclose queues, but the Bhotika reference discloses the feature, as discussed below); and
while searching a…index based on the query vector (Goel in [0013] and [0014] discloses vector database providing storage and data search and retrieval for vectors in response to a user query, preprocess vector database to create an index for querying, for a given query vector using the index to identify a set of vectors that are close to the query vector; here Goel does not explicitly disclose accessing a HNSW index, but the Deep reference discloses the feature, as discussed below):
receiving, based on the query vector, identifications of a plurality of vectors, each vector corresponding to a different chunk of a plurality of chunks (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage);
for each vector of the plurality of vectors (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage):
identifying an item identifier (ID) of said each vector, wherein the chunk corresponding to said each vector is a chunk of an item identified by the item ID of said each vector (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage);
identifying an item-chunk…, from among the plurality of item-chunk…, that corresponds to the item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage); and
determining whether said each vector is to be added to the item-chunk… (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage);
storing a particular item ID in an entry, of the item map, that references a particular item-chunk…of the plurality of item-chunk… (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage); and
for at least one vector, of the plurality of vectors, that corresponds to the particular item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage),
determining to add the at least one vector to the particular item-chunk… that corresponds to the particular item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage); and
in response to determining to add the at least one vector to the particular item-chunk…, determining whether to update the item results…based on the at least one vector (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage).
Goel discloses maintaining item chunks and item results, however, Goel does not explicitly disclose
…a plurality of item-chunk queues…and an item results queue;
The Bhotika reference discloses a plurality of item-chunk queues and an item results queue (Bhotika in [0036] and [0037] discloses chunks added to a chunk added queue; Bhotika in [0036] and [0038] discloses storing chunk results in a chunk completed queue).
Therefore, it would have been obvious to a person of ordinary skill in the art, before the effective filing date of the claimed invention, having the teachings of Goel and Bhotika, to have combined Goel and Bhotika. The motivation to combine Goel and Bhotika would be to enable complex processing of documents by maintaining document chunks and chunk analysis results in queues (Bhotika: [0017], [0036], and [0038])).
Goel discloses accessing an index based on query vectors, however, Goel and Bhotika do not explicitly disclose:
…accessing a Hierarchical Navigable Small Worlds (HNSW) index…;
The Deep reference discloses accessing a Hierarchical Navigable Small Worlds (HNSW) index (Deep in Column 3 line 25 – Column 4 line 39 discloses a spatial index enabling efficient similarity based searches of embedding vectors or objects within a database, a partition map for the special index is consulted to identify target resources which have relevant partitions of the special index; Column 5 line 53 – Column 6 line 14 discloses a set of one or more query targets to which index partition requests pertaining to a first embedding vector are to be directed are identified using an index partition map, query targets comprise a stored spatial index, employing hierarchical navigable small world (HNSW) for the spatial index).
Therefore, it would have been obvious to a person of ordinary skill in the art, before the effective filing date of the claimed invention, having the teachings of Goel, Bhotika, and Deep, to have combined Goel, Bhotika, and Deep. The motivation to combine Goel, Bhotika, and Deep would be to enable efficient similarity based searches using a spatial index (Deep: Column 3 lines 25-45).
With respect to claim 13, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 12, wherein the instructions, when executed by the one or more computing devices, further cause:
in response to determining to update the item results queue based on the at least one vector, adding, to the item results queue, an entry that includes the particular item ID and a value that indicates a vector distance between the at least one vector and the query vector (Bhotika in [0036] and [0038] discloses updating entries in the queue based on result; Bhotika in [0030] and [0133] identify results such as a unique identifier for a block, relationship between the block and other blocks, generating a job identifier for a job associated with a request, receiving response associated with the identifier; Bhotika in [0096] discloses identifying smallest distance between feature vectors or one or multiple clusters).
With respect to claim 14, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 12, wherein determining whether said each vector is to be added to the item-chunk queue comprises for a particular vector of each said vector,
determining whether a first vector distance between the particular vector and the query vector is less than a second vector distance between a vector in the item-chunk queue and the query vector (Goel in [0014] and [0079] discloses Euclidean distance to establish similarity by measuring straight-line distance between vectors, using updated vector to compute the distance; Bhotika in [0096] discloses identifying smallest distance between feature vectors or one or multiple clusters);
determining whether a number of vectors in the item-chunk queue exceeds a threshold value (Goel in [0019] discloses once 10,000 new vectors are added corresponding to an index inside an intermediate data storage, all the vectors are re-indexed and the vectors are transferred to a primary storage; Goel in [0057] and [0080] discloses objects in the data storage modified after a certain threshold of number of operations or days to incorporate the changes into the index, periodically re-indexing whenever a certain configurable threshold of number of operations in data storage and time is reached; Bhotika in [0044] and [0128] discloses once a chunk failed processing more than some threshold number of times, it can be added to a dead letter queue, thresholds configured to prevent processing of large data; Deep in Column 4 lines 6-21 discloses if an object is recognized with a probability or confidence level higher than a selected threshold within a cache, a recognition-based action may be initiated; Deep in Column 5 line 35 to Column 6 line 14 discloses a threshold similarity criterion may be a tunable parameter, index partition map used to eliminate partitions which are unlikely to include embedding vectors which satisfy the similarity threshold from the spatial index); and
replacing an existing vector in the item-chunk queue with the particular vector in response to determining the first vector distance is less than the second vector distance and the number of vectors in the item-chunk queue exceeds the threshold value (Goel in [0019] discloses once 10,000 new vectors are added corresponding to an index inside an intermediate data storage, all the vectors are re-indexed and the vectors are transferred to a primary storage; Goel in [0057] and [0080] discloses objects in the data storage modified after a certain threshold of number of operations or days to incorporate the changes into the index, periodically re-indexing whenever a certain configurable threshold of number of operations in data storage and time is reached; Bhotika in [0044] and [0128] discloses once a chunk failed processing more than some threshold number of times, it can be added to a dead letter queue, thresholds configured to prevent processing of large data; Deep in Column 4 lines 6-21 discloses if an object is recognized with a probability or confidence level higher than a selected threshold within a cache, a recognition-based action may be initiated; Deep in Column 5 line 35 to Column 6 line 14 discloses a threshold similarity criterion may be a tunable parameter, index partition map used to eliminate partitions which are unlikely to include embedding vectors which satisfy the similarity threshold from the spatial index).
With respect to claim 15, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 12, wherein the instructions, when executed by the one or more computing devices, further cause:
determining that the item results queue contains an entry that includes the particular item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result); and
in response to determining to update the item results queue based on the at least one vector and determining that the item results queue contains an entry that includes the particular item ID, replacing, in the entry, a first value with a second value that indicates a vector distance between the at least one vector and the query vector (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 16, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 12, wherein the instructions, when executed by the one or more computing devices, further cause:
determining that a number of entries in the particular item-chunk queue that corresponds to the particular item ID exceeds a threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result); and
adding an entry corresponding to the particular item ID in the item results queue in response to the number of entries in the particular item-chunk queue exceeding the threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 17, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 12, wherein the instructions, when executed by the one or more computing devices, further cause:
storing a second item ID in a second entry, of the item map, that references a second item-chunk queue of the plurality of item-chunk queues (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result);
wherein the item results queue does not include an entry for the second item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result);
for a second vector, of the plurality of vectors, that corresponds to a second item ID, in response to determining to add the second vector to the second item-chunk queue that corresponds to the second item ID, determining whether to add, to the item results queue, a particular entry for the second item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result);
wherein determining to add, to the item results queue, a particular entry for the second item ID comprises performing a comparison between a number of entries in the item results queue with a threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 18, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 17, wherein the instructions, when executed by the one or more computing devices, further cause:
based on the comparison, determining that the number of entries is equal to the threshold value (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result); and
in response to determining the number of entries is equal to the threshold value, determining whether the particular entry can replace the one of the entries in the item results queue (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 19, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 12, wherein the instructions, when executed by the one or more computing devices, further cause allocating a new item-chunk queue for a certain item ID in response to determining no existing item-chunk queue corresponds to the certain item ID (Goel in [0013] and [0014] and [0031] discloses nearest neighbor vectors are retrieved from the indexed vector database and returned to a user as search results, vector data storage includes vector data stored or generated as a result of implemented functions; Goel in [0017] and [0038] discloses a vector database including a plurality of vectors, index built by clustering the vectors into a set of clusters, index forming a hierarchical index including a plurality of layers, identifying vectors by one or more attributes, such as a tenant-id, an index name, a version number, a layer number, a cluster name, a list of vector IDs, a list of vectors etc., index divided into small chunks of vectors, such as clusters, each cluster stored as a separate object, generating unique identifier for each object; Goel in [0019] discloses inserting all new vectors associated with operations such as insert, delete, update etc. by adding new vectors corresponding to an index inside a storage, re-indexing vectors using the index once a threshold numbed of new vectors are added and transferring the vectors to another storage; Bhotika in [0036] and [0038] discloses updating entries in the queue based on result).
With respect to claim 20, Goel in view of Bhotika and in further view of Deep discloses the one or more non-transitory storage media of Claim 12, wherein identifying the item ID comprises referencing a covering column corresponding to each vector, wherein a vector source array includes a pointer that references covering column storage for each vector (Goel in [0013] discloses vector data includes a series of floating data points used to represent various types of data, an array of data points or vectors stored in a vector database designed to provide, in addition to storage, data search and retrieval facilities for vectors in response to user query; Goel in [0039] and [0040] discloses data storage includes tables indicating index metadata and vector operations, index metadata provides a list of existing indexes in the vector database, index metadata having metadata information including attributes, such as an index name, tenant id, index type, default query parameters, and a version of the index, index metadata table helping in mapping the index with vectors/objects to be fetched).
Conclusion
Applicant's amendment necessitated the new ground(s) of rejection presented in this Office action. Accordingly, THIS ACTION IS MADE FINAL. See MPEP § 706.07(a). Applicant is reminded of the extension of time policy as set forth in 37 CFR 1.136(a).
A shortened statutory period for reply to this final action is set to expire THREE MONTHS from the mailing date of this action. In the event a first reply is filed within TWO MONTHS of the mailing date of this final action and the advisory action is not mailed until after the end of the THREE-MONTH shortened statutory period, then the shortened statutory period will expire on the date the advisory action is mailed, and any nonprovisional extension fee (37 CFR 1.17(a)) pursuant to 37 CFR 1.136(a) will be calculated from the mailing date of the advisory action. In no event, however, will the statutory period for reply expire later than SIX MONTHS from the mailing date of this final action.
Remarks
The relevant prior art of record that are not used in claim rejections but are pertinent to the claims or disclosure are:
Guo (US Pat 10,255,323), which discloses projecting vectors into chunks, quantizing vectors by assigning each chunk of a vector an identifier, assigning each chunk to a cluster and storing the identifier as a search item.
Kumar (US Pub 2018/0101570), which discloses querying using query vector, comparing query vector to entries in chunks, determining identifiers for each chunk, and using the identifier to identify items in chunks.
Contact Information
Any inquiry concerning this communication or earlier communications from the examiner should be directed to REZWANUL MAHMOOD whose telephone number is (571)272-5625. The examiner can normally be reached M-F 9-5:30.
Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice.
If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, Ann J. Lo can be reached at 571-272-9767. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300.
Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000.
/R.M/Examiner, Art Unit 2159 /ANN J LO/Supervisory Patent Examiner, Art Unit 2159