summaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2023-05-02 15:21:40 +0000
committerGeir Storli <geirst@yahooinc.com>2023-05-02 15:21:40 +0000
commitcde6875d5697545930e0e0c9bda6abf3b365cccc (patch)
tree11e8c6e8aa7422327838591b37f6ea140f8d3722 /documentapi
parentb83cc57a23c24cba060e884ade5f056cd46c5a82 (diff)
Deserialize match features in SearchResult used in streaming search.
Diffstat (limited to 'documentapi')
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java57
-rw-r--r--documentapi/src/tests/messages/messages60test.cpp6
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-6.datbin128 -> 130 bytes
3 files changed, 48 insertions, 15 deletions
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java
index 22650fcdbf8..940217aa2b4 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java
@@ -633,6 +633,8 @@ public class Messages60TestCase extends MessagesTestBase {
@Override
public void run() throws Exception {
+ test_result_with_match_features();
+
Routable routable = deserialize("QueryResultMessage-1", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
assertTrue(routable instanceof QueryResultMessage);
@@ -647,9 +649,11 @@ public class Messages60TestCase extends MessagesTestBase {
com.yahoo.vdslib.SearchResult.Hit h = msg.getResult().getHit(0);
assertEquals(89.0, h.getRank(), 1E-6);
assertEquals("doc1", h.getDocId());
+ assertFalse(h.getMatchFeatures().isPresent());
h = msg.getResult().getHit(1);
assertEquals(109.0, h.getRank(), 1E-6);
assertEquals("doc17", h.getDocId());
+ assertFalse(h.getMatchFeatures().isPresent());
routable = deserialize("QueryResultMessage-3", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
assertTrue(routable instanceof QueryResultMessage);
@@ -659,9 +663,11 @@ public class Messages60TestCase extends MessagesTestBase {
h = msg.getResult().getHit(0);
assertEquals(109.0, h.getRank(), 1E-6);
assertEquals("doc17", h.getDocId());
+ assertFalse(h.getMatchFeatures().isPresent());
h = msg.getResult().getHit(1);
assertEquals(89.0, h.getRank(), 1E-6);
assertEquals("doc1", h.getDocId());
+ assertFalse(h.getMatchFeatures().isPresent());
routable = deserialize("QueryResultMessage-4", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
assertTrue(routable instanceof QueryResultMessage);
@@ -673,32 +679,55 @@ public class Messages60TestCase extends MessagesTestBase {
assertEquals(89.0, h.getRank(), 1E-6);
assertEquals("doc1", h.getDocId());
byte[] b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] e = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '2' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(e[i], b[i]);
- }
+ assertEqualsData(new byte[] { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '2' }, b);
+
h = msg.getResult().getHit(1);
assertTrue(h instanceof SearchResult.HitWithSortBlob);
assertEquals(109.0, h.getRank(), 1E-6);
assertEquals("doc17", h.getDocId());
b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] d = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '1' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(d[i], b[i]);
- }
+ assertEqualsData(new byte[] { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '1' }, b);
+
h = msg.getResult().getHit(2);
assertTrue(h instanceof SearchResult.HitWithSortBlob);
assertEquals(90.0, h.getRank(), 1E-6);
assertEquals("doc18", h.getDocId());
b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] c = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '3' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(c[i], b[i]);
+ assertEqualsData(new byte[] { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '3' }, b);
+ }
+
+ void assertEqualsData(byte[] exp, byte[] act) {
+ assertEquals(exp.length, act.length);
+ for (int i = 0; i < exp.length; ++i) {
+ assertEquals(exp[i], act[i]);
}
}
+
+ void test_result_with_match_features() {
+ Routable routable = deserialize("QueryResultMessage-6", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
+ assertTrue(routable instanceof QueryResultMessage);
+
+ var msg = (QueryResultMessage)routable;
+ assertEquals(2, msg.getResult().getHitCount());
+
+ var h = msg.getResult().getHit(0);
+ assertTrue(h instanceof SearchResult.Hit);
+ assertEquals(7.0, h.getRank(), 1E-6);
+ assertEquals("doc2", h.getDocId());
+ assertTrue(h.getMatchFeatures().isPresent());
+ var mf = h.getMatchFeatures().get();
+ assertEquals(12.0, mf.field("foo").asDouble(), 1E-6);
+ assertEqualsData(new byte[] { 'T', 'h', 'e', 'r', 'e' }, mf.field("bar").asData());
+
+ h = msg.getResult().getHit(1);
+ assertTrue(h instanceof SearchResult.Hit);
+ assertEquals(5.0, h.getRank(), 1E-6);
+ assertEquals("doc1", h.getDocId());
+ assertTrue(h.getMatchFeatures().isPresent());
+ mf = h.getMatchFeatures().get();
+ assertEquals(1.0, mf.field("foo").asDouble(), 1E-6);
+ assertEqualsData(new byte[] { 'H', 'i' }, mf.field("bar").asData());
+ }
}
public class testGetBucketListReply implements RunnableTest {
diff --git a/documentapi/src/tests/messages/messages60test.cpp b/documentapi/src/tests/messages/messages60test.cpp
index 89ab20373e7..58295ae2395 100644
--- a/documentapi/src/tests/messages/messages60test.cpp
+++ b/documentapi/src/tests/messages/messages60test.cpp
@@ -687,7 +687,7 @@ Messages60Test::testQueryResultMessage()
sr3.set_match_features(FeatureValues(mf));
sr3.sort();
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 123u, serialize("QueryResultMessage-6", qrm3));
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 125u, serialize("QueryResultMessage-6", qrm3));
routable = deserialize("QueryResultMessage-6", DocumentProtocol::MESSAGE_QUERYRESULT, LANG_CPP);
if (!EXPECT_TRUE(routable)) {
return false;
@@ -709,6 +709,10 @@ Messages60Test::testQueryResultMessage()
EXPECT_EQUAL(2u, mfv.size());
EXPECT_EQUAL(1.0, mfv[0].as_double());
EXPECT_EQUAL("Hi", mfv[1].as_data().make_string());
+ const auto& mf_names = dr->get_match_features().names;
+ EXPECT_EQUAL(2u, mf_names.size());
+ EXPECT_EQUAL("foo", mf_names[0]);
+ EXPECT_EQUAL("bar", mf_names[1]);
return true;
}
diff --git a/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-6.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-6.dat
index 229441aa9ba..efe7f8546a9 100644
--- a/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-6.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-6.dat
Binary files differ