@@ -281,4 +281,62 @@ void shouldFilterWithInCondition() {
281281 assertThat (results .get (0 ).getId ()).isEqualTo ("1" );
282282 }
283283
284+ @ Test
285+ void shouldFilterByNumericRange () {
286+ List <Document > docs = Arrays .asList (
287+ Document .builder ().id ("1" ).text ("entity" ).metadata (Map .of ("value" , 1 )).build (),
288+ Document .builder ().id ("2" ).text ("entity" ).metadata (Map .of ("value" , 2 )).build (),
289+ Document .builder ().id ("3" ).text ("entity" ).metadata (Map .of ("value" , 3 )).build ());
290+
291+ vectorStore .add (docs );
292+
293+ List <Document > results = vectorStore .similaritySearch (
294+ SearchRequest .builder ().query ("entity" ).filterExpression ("value >= 1 && value <= 1" ).build ());
295+
296+ assertThat (results ).hasSize (1 );
297+ assertThat (results .get (0 ).getId ()).isEqualTo ("1" );
298+ }
299+
300+ @ Test
301+ void shouldReturnEmptyResultsWhenNoDocumentsMatchFilter () {
302+ Document doc = Document .builder ().id ("1" ).text ("test" ).metadata (Map .of ("type" , "document" )).build ();
303+
304+ vectorStore .add (List .of (doc ));
305+
306+ List <Document > results = vectorStore
307+ .similaritySearch (SearchRequest .builder ().query ("test" ).filterExpression ("type == 'image'" ).build ());
308+
309+ assertThat (results ).isEmpty ();
310+ }
311+
312+ @ Test
313+ void shouldFilterByBooleanValue () {
314+ List <Document > docs = Arrays .asList (
315+ Document .builder ().id ("1" ).text ("instance" ).metadata (Map .of ("enabled" , true )).build (),
316+ Document .builder ().id ("2" ).text ("instance" ).metadata (Map .of ("enabled" , false )).build ());
317+
318+ vectorStore .add (docs );
319+
320+ List <Document > results = vectorStore
321+ .similaritySearch (SearchRequest .builder ().query ("instance" ).filterExpression ("enabled == true" ).build ());
322+
323+ assertThat (results ).hasSize (1 );
324+ assertThat (results .get (0 ).getId ()).isEqualTo ("1" );
325+ }
326+
327+ @ Test
328+ void shouldFilterByNotEqual () {
329+ List <Document > docs = Arrays .asList (
330+ Document .builder ().id ("1" ).text ("item" ).metadata (Map .of ("classification" , "typeA" )).build (),
331+ Document .builder ().id ("2" ).text ("item" ).metadata (Map .of ("classification" , "typeB" )).build ());
332+
333+ vectorStore .add (docs );
334+
335+ List <Document > results = vectorStore .similaritySearch (
336+ SearchRequest .builder ().query ("item" ).filterExpression ("classification != 'typeB'" ).build ());
337+
338+ assertThat (results ).hasSize (1 );
339+ assertThat (results .get (0 ).getId ()).isEqualTo ("1" );
340+ }
341+
284342}
0 commit comments