diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java
index 2e575fe..2f8ef0b 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java
@@ -17,6 +17,7 @@
 import com.fasterxml.jackson.databind.annotation.JsonNaming;
 import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Positive;
 import java.util.Collection;
 import java.util.Objects;
 import org.apache.couchdb.nouveau.core.ser.PrimitiveWrapper;
@@ -27,6 +28,9 @@
     @NotEmpty
     private String id;
 
+    @Positive
+    private long seq;
+
     @NotNull
     private PrimitiveWrapper<?>[] order;
 
@@ -35,8 +39,10 @@
 
     public SearchHit() {}
 
-    public SearchHit(final String id, final PrimitiveWrapper<?>[] order, final Collection<StoredField> fields) {
+    public SearchHit(
+            final String id, final long seq, final PrimitiveWrapper<?>[] order, final Collection<StoredField> fields) {
         this.id = id;
+        this.seq = seq;
         this.order = Objects.requireNonNull(order);
         this.fields = Objects.requireNonNull(fields);
     }
@@ -45,6 +51,10 @@
         return id;
     }
 
+    public long getSeq() {
+        return seq;
+    }
+
     public PrimitiveWrapper<?>[] getOrder() {
         return order;
     }
@@ -55,6 +65,6 @@
 
     @Override
     public String toString() {
-        return "SearchHit [id=" + id + ", order=" + order + ", fields=" + fields + "]";
+        return "SearchHit [id=" + id + ", seq=" + seq + ", order=" + order + ", fields=" + fields + "]";
     }
 }
diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java
index ce7f7d7..0794f33 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java
@@ -245,7 +245,7 @@
             final List<StoredField> fields =
                     new ArrayList<StoredField>(doc.getFields().size());
             for (IndexableField field : doc.getFields()) {
-                if (field.name().equals("_id")) {
+                if (field.name().startsWith("_")) {
                     continue;
                 }
                 final StoredValue storedValue = field.storedValue();
@@ -265,7 +265,8 @@
             }
 
             final PrimitiveWrapper<?>[] after = toAfter(((FieldDoc) scoreDoc));
-            hits.add(new SearchHit(doc.get("_id"), after, fields));
+            hits.add(new SearchHit(
+                    doc.get("_id"), doc.getField("_seq").numericValue().longValue(), after, fields));
         }
 
         searchResults.setTotalHits(topDocs.totalHits.value);
@@ -382,6 +383,9 @@
         result.add(new org.apache.lucene.document.StringField("_id", docId, Store.YES));
         result.add(new SortedDocValuesField("_id", new BytesRef(docId)));
 
+        // seq
+        result.add(new org.apache.lucene.document.LongField("_seq", request.getSeq(), Store.YES));
+
         // partition (optional)
         if (request.hasPartition()) {
             result.add(new org.apache.lucene.document.StringField("_partition", request.getPartition(), Store.NO));
diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java b/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java
index ece5fb3..c439761 100644
--- a/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java
+++ b/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.nio.file.Path;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -74,15 +75,25 @@
         final Index index = setup(path);
         try {
             final int count = 100;
+            List<String> ids = new ArrayList<String>(count);
             for (int i = 1; i <= count; i++) {
                 final Collection<Field> fields = List.of(new StringField("foo", "bar", false));
                 final DocumentUpdateRequest request = new DocumentUpdateRequest(i - 1, i, null, fields);
-                index.update("doc" + i, request);
+                final String id = "doc" + i;
+                ids.add(id);
+                index.update(id, request);
             }
+            ids.sort(String::compareTo);
             final SearchRequest request = new SearchRequest();
             request.setQuery("*:*");
+            request.setLimit(count);
             final SearchResults results = index.search(request);
             assertThat(results.getTotalHits()).isEqualTo(count);
+            for (int i = 0; i < count; i++) {
+                var hit = results.getHits().get(i);
+                assertThat(hit.getId()).isEqualTo(ids.get(i));
+                assertThat(hit.getSeq()).isEqualTo(Long.parseLong(ids.get(i).substring(3)));
+            }
         } finally {
             cleanup(index);
         }
