@@ -34,15 +34,30 @@ var (
3434 httpOnly bool
3535 socketOnly bool
3636
37- searchLimit int
38- searchField string
39- searchExt string
40- searchFuzzy bool
41- searchSort string
42- searchSortDesc bool
43- searchMinSize int64
44- searchMaxSize int64
45- searchJSON bool
37+ searchLimit int
38+ searchField string
39+ searchExt string
40+ searchFuzzy bool
41+ searchSort string
42+ searchSortDesc bool
43+ searchMinSize int64
44+ searchMaxSize int64
45+ searchJSON bool
46+ searchFolder string
47+ searchExifMake string
48+ searchExifModel string
49+ searchExifDateAfter string
50+ searchExifDateBefore string
51+ searchExifMinISO int
52+ searchExifMaxISO int
53+ searchExifMinAp float64
54+ searchExifMaxAp float64
55+ searchExifMinFocalLen float64
56+ searchExifMaxFocalLen float64
57+ searchExifLatMin float64
58+ searchExifLatMax float64
59+ searchExifLonMin float64
60+ searchExifLonMax float64
4661)
4762
4863var rootCmd = & cobra.Command {
@@ -138,11 +153,26 @@ func init() {
138153 searchCmd .Flags ().StringVarP (& searchField , "field" , "f" , "" , "search specific field (filename, body, title)" )
139154 searchCmd .Flags ().StringVarP (& searchExt , "ext" , "e" , "" , "filter by file extension (e.g., .jpg)" )
140155 searchCmd .Flags ().BoolVar (& searchFuzzy , "fuzzy" , false , "enable fuzzy matching for typos" )
141- searchCmd .Flags ().StringVar (& searchSort , "sort" , "score" , "sort by: score, mtime, size, filename" )
156+ searchCmd .Flags ().StringVar (& searchSort , "sort" , "score" , "sort by: score, mtime, size, filename, exif_date, iso, focal_length, aperture " )
142157 searchCmd .Flags ().BoolVar (& searchSortDesc , "desc" , true , "sort descending" )
143158 searchCmd .Flags ().Int64Var (& searchMinSize , "min-size" , 0 , "minimum file size in bytes" )
144159 searchCmd .Flags ().Int64Var (& searchMaxSize , "max-size" , 0 , "maximum file size in bytes" )
145160 searchCmd .Flags ().BoolVar (& searchJSON , "json" , false , "output results in JSON format" )
161+ searchCmd .Flags ().StringVar (& searchFolder , "folder" , "" , "filter by folder path (e.g., /home/user/Pictures)" )
162+ searchCmd .Flags ().StringVar (& searchExifMake , "exif-make" , "" , "filter by camera make (e.g., Canon)" )
163+ searchCmd .Flags ().StringVar (& searchExifModel , "exif-model" , "" , "filter by camera model (e.g., Canon EOS 5D)" )
164+ searchCmd .Flags ().StringVar (& searchExifDateAfter , "exif-date-after" , "" , "photos taken after date (RFC3339 or EXIF format)" )
165+ searchCmd .Flags ().StringVar (& searchExifDateBefore , "exif-date-before" , "" , "photos taken before date (RFC3339 or EXIF format)" )
166+ searchCmd .Flags ().IntVar (& searchExifMinISO , "exif-min-iso" , 0 , "minimum ISO value" )
167+ searchCmd .Flags ().IntVar (& searchExifMaxISO , "exif-max-iso" , 0 , "maximum ISO value" )
168+ searchCmd .Flags ().Float64Var (& searchExifMinAp , "exif-min-aperture" , 0 , "minimum aperture (f-number)" )
169+ searchCmd .Flags ().Float64Var (& searchExifMaxAp , "exif-max-aperture" , 0 , "maximum aperture (f-number)" )
170+ searchCmd .Flags ().Float64Var (& searchExifMinFocalLen , "exif-min-focal-len" , 0 , "minimum focal length in mm" )
171+ searchCmd .Flags ().Float64Var (& searchExifMaxFocalLen , "exif-max-focal-len" , 0 , "maximum focal length in mm" )
172+ searchCmd .Flags ().Float64Var (& searchExifLatMin , "exif-lat-min" , 0 , "minimum GPS latitude" )
173+ searchCmd .Flags ().Float64Var (& searchExifLatMax , "exif-lat-max" , 0 , "maximum GPS latitude" )
174+ searchCmd .Flags ().Float64Var (& searchExifLonMin , "exif-lon-min" , 0 , "minimum GPS longitude" )
175+ searchCmd .Flags ().Float64Var (& searchExifLonMax , "exif-lon-max" , 0 , "maximum GPS longitude" )
146176
147177 indexCmd .AddCommand (indexGenerateCmd )
148178 indexCmd .AddCommand (indexSyncCmd )
@@ -304,15 +334,30 @@ func runSearch(cmd *cobra.Command, args []string) error {
304334 }
305335
306336 clientOpts := & client.SearchOptions {
307- Query : query ,
308- Limit : limit ,
309- Field : searchField ,
310- Extension : searchExt ,
311- Fuzzy : searchFuzzy ,
312- SortBy : searchSort ,
313- SortDesc : searchSortDesc ,
314- MinSize : searchMinSize ,
315- MaxSize : searchMaxSize ,
337+ Query : query ,
338+ Limit : limit ,
339+ Field : searchField ,
340+ Extension : searchExt ,
341+ Fuzzy : searchFuzzy ,
342+ SortBy : searchSort ,
343+ SortDesc : searchSortDesc ,
344+ MinSize : searchMinSize ,
345+ MaxSize : searchMaxSize ,
346+ Folder : searchFolder ,
347+ ExifMake : searchExifMake ,
348+ ExifModel : searchExifModel ,
349+ ExifDateAfter : searchExifDateAfter ,
350+ ExifDateBefore : searchExifDateBefore ,
351+ ExifMinISO : searchExifMinISO ,
352+ ExifMaxISO : searchExifMaxISO ,
353+ ExifMinAperture : searchExifMinAp ,
354+ ExifMaxAperture : searchExifMaxAp ,
355+ ExifMinFocalLen : searchExifMinFocalLen ,
356+ ExifMaxFocalLen : searchExifMaxFocalLen ,
357+ ExifLatMin : searchExifLatMin ,
358+ ExifLatMax : searchExifLatMax ,
359+ ExifLonMin : searchExifLonMin ,
360+ ExifLonMax : searchExifLonMax ,
316361 }
317362
318363 result , err := client .SearchWithOptions (clientOpts )
@@ -348,15 +393,30 @@ func runSearch(cmd *cobra.Command, args []string) error {
348393 }
349394
350395 indexerOpts := & indexer.SearchOptions {
351- Query : query ,
352- Limit : limit ,
353- Field : searchField ,
354- Extension : searchExt ,
355- Fuzzy : searchFuzzy ,
356- SortBy : searchSort ,
357- SortDesc : searchSortDesc ,
358- MinSize : searchMinSize ,
359- MaxSize : searchMaxSize ,
396+ Query : query ,
397+ Limit : limit ,
398+ Field : searchField ,
399+ Extension : searchExt ,
400+ Fuzzy : searchFuzzy ,
401+ SortBy : searchSort ,
402+ SortDesc : searchSortDesc ,
403+ MinSize : searchMinSize ,
404+ MaxSize : searchMaxSize ,
405+ Folder : searchFolder ,
406+ ExifMake : searchExifMake ,
407+ ExifModel : searchExifModel ,
408+ ExifDateAfter : searchExifDateAfter ,
409+ ExifDateBefore : searchExifDateBefore ,
410+ ExifMinISO : searchExifMinISO ,
411+ ExifMaxISO : searchExifMaxISO ,
412+ ExifMinAperture : searchExifMinAp ,
413+ ExifMaxAperture : searchExifMaxAp ,
414+ ExifMinFocalLen : searchExifMinFocalLen ,
415+ ExifMaxFocalLen : searchExifMaxFocalLen ,
416+ ExifLatMin : searchExifLatMin ,
417+ ExifLatMax : searchExifLatMax ,
418+ ExifLonMin : searchExifLonMin ,
419+ ExifLonMax : searchExifLonMax ,
360420 }
361421
362422 result , err = idx .SearchWithOptions (indexerOpts )
0 commit comments