aboutsummaryrefslogtreecommitdiff
path: root/icing/index/iterator/doc-hit-info-iterator-or.cc
diff options
context:
space:
mode:
authorTerry Wang <tytytyww@google.com>2023-03-01 00:41:52 -0800
committerTerry Wang <tytytyww@google.com>2023-03-01 00:41:52 -0800
commite103b8ea56212b2a5abc082ce888843f19c7d567 (patch)
tree6621759619d3adf3d7285e110969ee082d7d2e0e /icing/index/iterator/doc-hit-info-iterator-or.cc
parent5a41ca990be33387b0d5d15836a465bbe5ff5a28 (diff)
downloadicing-e103b8ea56212b2a5abc082ce888843f19c7d567.tar.gz
Update Icing from upstream.
Descriptions: ====================================================================== Add PropertyUtil for all property name/path related operations ====================================================================== [JoinableCache][2.0/x] Create SchemaPropertyIterator ====================================================================== [JoinableCache][2.1/x] Handle nested indexable flag ====================================================================== [JoinableCache][2.2/x] Add schema cycle dependency detection for SchemaPropertyIterator ====================================================================== [JoinableCache][3.0/x] Refactor SectionManager ====================================================================== [JoinableCache][3.1/x] Add unit tests for SectionManager::Builder and SchemaTypeManager ====================================================================== [NumericSearch][Storage][12/x] Implement Edit and GetIterator for IntegerIndex ====================================================================== [NumericSearch][Storage][13.0/x] Rename numeric-index_test as integer-index_test ====================================================================== [NumericSearch][Storage][13.1/x] Add IntegerIndexTest ====================================================================== Support the "len", "sum" and "avg" functions in advanced scoring. ====================================================================== Support the "this.childrenScores()" function to allow expressing children scores of joins in advanced scoring. ====================================================================== Create an integration test for Join with advanced scoring ====================================================================== Rename the word "children" to "args" for function related ScoreExpression ====================================================================== Improve IndexBlock by PRead/PWrite instead of repeating mmap/msync/unmap ====================================================================== Refactor QueryVisitor to prepare for support for function calls. ====================================================================== Add support for function calls. ====================================================================== Fix breakage in score-and-rank_benchmark. ====================================================================== [NumericSearch][Storage][adhoc][ez] Fix comment for IntegerIndex ====================================================================== [NumericSearch][Storage][14/x] Create first IntegerIndexStorage benchmark ====================================================================== Rename Icing schema related terminology to prepare for polymorphism support ====================================================================== [JoinableCache][4.0/x] Move common methods from SectionManager to PropertyUtil ====================================================================== [JoinableCache][4.1/x] Retire GetSectionContent ====================================================================== [JoinableCache][4.2/x] Polish SectionManagerTest ====================================================================== Modify QueryVisitor to do: ====================================================================== [NumericSearch][Storage][15/x] Implement TransferIndex for IntegerIndexStorage ====================================================================== [NumericSearch][Storage][16/x] Implement Optimize and last added document id for IntegerIndex ====================================================================== [NumericSearch][rollout][1/x] Include indexable int64 into SchemaDelta and backward compatibility ====================================================================== Add backwards compatibility test for Icing schema storage migration. ====================================================================== Implement trim the right-most node from the doc-hit-info-iterator. ====================================================================== Add TrimmedNode structure into doc-hit-info-iterator. ====================================================================== [JoinableCache][5/x] Implement JoinableProperty and JoinablePropertyManager ====================================================================== [JoinableCache][6/x] Add JoinablePropertyManager into SchemaTypeManager ====================================================================== [JoinableCache][7/x] Implement ExtractJoinableProperties ====================================================================== [JoinableCache][8/x] Create class QualifiedIdTypeJoinableCache ====================================================================== [JoinableCache][9/x] Implement factory method for QualifiedIdTypeJoinableCache ====================================================================== [JoinableCache][10/x] Implement Get and Put for QualifiedIdTypeJoinableCache ====================================================================== [JoinableCache][11/x] Add unit tests for QualifiedIdTypeJoinableCache ====================================================================== Modify DocHitInfoIteratorSectionRestrict to allow multi-property restricts ====================================================================== Fix the definition of LiteIndex::WantsMerge. ====================================================================== [NumericSearch][rollout][2.0/x] Rollout persistent IntegerIndex ====================================================================== [NumericSearch][rollout][2.1/x] Add more tests for integer index restoration and optimization ====================================================================== [JoinableCache][adhoc][ez] Remove qualified id type joinable cache size info from document storage info ====================================================================== Integrate trim right node into suggestion processor. Bug: 208654892 Bug: 228240987 Bug: 249829533 Bug: 256081830 Bug: 259744228 Bug: 261474063 Bug: 263890397 Bug: 266103594 Bug: 268738297 Bug: 269295094 Change-Id: I5f1b3f3ed0b5d6933dc8c2ab3279904f7706b23e
Diffstat (limited to 'icing/index/iterator/doc-hit-info-iterator-or.cc')
-rw-r--r--icing/index/iterator/doc-hit-info-iterator-or.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/icing/index/iterator/doc-hit-info-iterator-or.cc b/icing/index/iterator/doc-hit-info-iterator-or.cc
index 655cafc..8f7b84f 100644
--- a/icing/index/iterator/doc-hit-info-iterator-or.cc
+++ b/icing/index/iterator/doc-hit-info-iterator-or.cc
@@ -21,6 +21,7 @@
#include "icing/absl_ports/str_cat.h"
#include "icing/index/hit/doc-hit-info.h"
#include "icing/store/document-id.h"
+#include "icing/util/status-macros.h"
namespace icing {
namespace lib {
@@ -57,6 +58,26 @@ DocHitInfoIteratorOr::DocHitInfoIteratorOr(
std::unique_ptr<DocHitInfoIterator> right_it)
: left_(std::move(left_it)), right_(std::move(right_it)) {}
+libtextclassifier3::StatusOr<DocHitInfoIterator::TrimmedNode>
+DocHitInfoIteratorOr::TrimRightMostNode() && {
+ // Trim the whole OR iterator. Only keep the prefix of the right iterator.
+ //
+ // The OR operator has higher priority, it is not possible that we have an
+ // unfinished prefix in the nested iterator right-most child we need to search
+ // suggestion for.
+ //
+ // eg: `foo OR (bar baz)` is not valid for search suggestion since there is no
+ // unfinished last term to be filled.
+ //
+ // If we need to trim a OR iterator for search suggestion, the right child
+ // must be the last term. We don't need left side information to
+ // generate suggestion for the right side.
+ ICING_ASSIGN_OR_RETURN(TrimmedNode trimmed_right,
+ std::move(*right_).TrimRightMostNode());
+ trimmed_right.iterator_ = nullptr;
+ return trimmed_right;
+}
+
libtextclassifier3::Status DocHitInfoIteratorOr::Advance() {
// Cache the document_id of the left iterator for comparison to the right.
DocumentId orig_left_document_id = left_document_id_;
@@ -140,6 +161,26 @@ DocHitInfoIteratorOrNary::DocHitInfoIteratorOrNary(
std::vector<std::unique_ptr<DocHitInfoIterator>> iterators)
: iterators_(std::move(iterators)) {}
+libtextclassifier3::StatusOr<DocHitInfoIterator::TrimmedNode>
+DocHitInfoIteratorOrNary::TrimRightMostNode() && {
+ // Trim the whole OR iterator.
+ //
+ // The OR operator has higher priority, it is not possible that we have an
+ // unfinished prefix in the nested iterator right-most child we need to search
+ // suggestion for.
+ //
+ // eg: `foo OR (bar baz)` is not valid for search suggestion since there is no
+ // unfinished last term to be filled.
+ //
+ // If we need to trim a OR iterator for search suggestion, the right-most
+ // child must be the last term. We don't need left side information to
+ // generate suggestion for the right side.
+ ICING_ASSIGN_OR_RETURN(TrimmedNode trimmed_right,
+ std::move(*iterators_.back()).TrimRightMostNode());
+ trimmed_right.iterator_ = nullptr;
+ return trimmed_right;
+}
+
libtextclassifier3::Status DocHitInfoIteratorOrNary::Advance() {
current_iterators_.clear();
if (iterators_.size() < 2) {