You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/10/31 22:02:57 UTC
[20/20] lucy git commit: Tune and test Go bindings for TermVector.
Tune and test Go bindings for TermVector.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/85790f34
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/85790f34
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/85790f34
Branch: refs/heads/LUCY-282-test-index-go-pt1
Commit: 85790f34e03203a57360b1c00b6fb86c2561db4c
Parents: e264f6f
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Fri Oct 30 17:41:31 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Fri Oct 30 17:41:31 2015 -0700
----------------------------------------------------------------------
go/build.go | 7 +++++++
go/lucy/index.go | 31 +++++++++++++++++++++++++++++++
go/lucy/index_test.go | 29 +++++++++++++++++++++++++++++
go/lucy/object.go | 9 +++++++++
4 files changed, 76 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/85790f34/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 52de435..75fe5b5 100644
--- a/go/build.go
+++ b/go/build.go
@@ -170,6 +170,13 @@ func specClasses(parcel *cfc.Parcel) {
managerBinding.SpecMethod("Recycle", "Recycle(PolyReader, DeletionsWriter, int64, bool) ([]SegReader, error)")
managerBinding.Register()
+ tvBinding := cfc.NewGoClass(parcel, "Lucy::Index::TermVector")
+ tvBinding.SpecMethod("Get_Positions", "GetPositions() []int32")
+ tvBinding.SpecMethod("Get_Start_Offsets", "GetStartOffsets() []int32")
+ tvBinding.SpecMethod("Get_End_Offsets", "GetEndOffsets() []int32")
+ tvBinding.SetSuppressCtor(true)
+ tvBinding.Register()
+
schemaBinding := cfc.NewGoClass(parcel, "Lucy::Plan::Schema")
schemaBinding.SpecMethod("All_Fields", "AllFields() []string")
schemaBinding.Register()
http://git-wip-us.apache.org/repos/asf/lucy/blob/85790f34/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index ba26f95..43dc90c 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -20,6 +20,7 @@ package lucy
#include "Lucy/Index/Indexer.h"
#include "Lucy/Index/IndexManager.h"
#include "Lucy/Index/BackgroundMerger.h"
+#include "Lucy/Index/TermVector.h"
#include "Lucy/Document/Doc.h"
#include "Lucy/Plan/Schema.h"
#include "Clownfish/Hash.h"
@@ -307,3 +308,33 @@ func (im *IndexManagerIMP) Recycle(reader PolyReader, delWriter DeletionsWriter,
})
return retval, err
}
+
+func NewTermVector(field, text string, positions, startOffsets, endOffsets []int32) TermVector {
+ fieldC := (*C.cfish_String)(clownfish.GoToClownfish(field, unsafe.Pointer(C.CFISH_STRING), false))
+ textC := (*C.cfish_String)(clownfish.GoToClownfish(text, unsafe.Pointer(C.CFISH_STRING), false))
+ defer C.cfish_decref(unsafe.Pointer(fieldC))
+ defer C.cfish_decref(unsafe.Pointer(textC))
+ posits := NewI32Array(positions)
+ starts := NewI32Array(startOffsets)
+ ends := NewI32Array(endOffsets)
+ positsC := (*C.lucy_I32Array)(clownfish.Unwrap(posits, "posits"))
+ startsC := (*C.lucy_I32Array)(clownfish.Unwrap(starts, "starts"))
+ endsC := (*C.lucy_I32Array)(clownfish.Unwrap(ends, "ends"))
+ retvalC := C.lucy_TV_new(fieldC, textC, positsC, startsC, endsC)
+ return WRAPTermVector(unsafe.Pointer(retvalC))
+}
+
+func (tv *TermVectorIMP) GetPositions() []int32 {
+ self := (*C.lucy_TermVector)(clownfish.Unwrap(tv, "tv"))
+ return i32ArrayToSlice(C.LUCY_TV_Get_Positions(self))
+}
+
+func (tv *TermVectorIMP) GetStartOffsets() []int32 {
+ self := (*C.lucy_TermVector)(clownfish.Unwrap(tv, "tv"))
+ return i32ArrayToSlice(C.LUCY_TV_Get_Start_Offsets(self))
+}
+
+func (tv *TermVectorIMP) GetEndOffsets() []int32 {
+ self := (*C.lucy_TermVector)(clownfish.Unwrap(tv, "tv"))
+ return i32ArrayToSlice(C.LUCY_TV_Get_End_Offsets(self))
+}
http://git-wip-us.apache.org/repos/asf/lucy/blob/85790f34/go/lucy/index_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go
index ba9a009..bdfe05a 100644
--- a/go/lucy/index_test.go
+++ b/go/lucy/index_test.go
@@ -21,6 +21,8 @@ import "os"
import "reflect"
import "strings"
+import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish"
+
func TestIndexerAddDoc(t *testing.T) {
schema := createTestSchema()
index := NewRAMFolder("")
@@ -294,3 +296,30 @@ func TestBitVecDelDocsMisc(t *testing.T) {
t.Errorf("Get returned false")
}
}
+
+func TestTermVectorMisc(t *testing.T) {
+
+ positions := []int32{0, 3}
+ startOffsets := []int32{0, 20}
+ endOffsets := []int32{2, 22}
+ tv := NewTermVector("content", "red yellow green red blue", positions, startOffsets, endOffsets)
+ if got := tv.GetPositions(); !reflect.DeepEqual(got, positions) {
+ t.Errorf("GetPositions: %v", got)
+ }
+ if got := tv.GetStartOffsets(); !reflect.DeepEqual(got, startOffsets) {
+ t.Errorf("GetStartOffsets: %v", got)
+ }
+ if got := tv.GetEndOffsets(); !reflect.DeepEqual(got, endOffsets) {
+ t.Errorf("GetEndOffsets: %v", got)
+ }
+
+ folder := NewRAMFolder("")
+ out, _ := folder.OpenOut("dump")
+ tv.Serialize(out)
+ out.Close()
+ in, _ := folder.OpenIn("dump")
+ dupe := clownfish.GetClass(tv).MakeObj().(TermVector).Deserialize(in)
+ if !tv.Equals(dupe) {
+ t.Errorf("Unsuccessful serialization round trip")
+ }
+}
http://git-wip-us.apache.org/repos/asf/lucy/blob/85790f34/go/lucy/object.go
----------------------------------------------------------------------
diff --git a/go/lucy/object.go b/go/lucy/object.go
index 78c86f5..bd0998b 100644
--- a/go/lucy/object.go
+++ b/go/lucy/object.go
@@ -49,3 +49,12 @@ func NewI32Array(nums []int32) I32Array {
}
return WRAPI32Array(unsafe.Pointer(obj))
}
+
+func i32ArrayToSlice(a *C.lucy_I32Array) []int32 {
+ size := int(C.LUCY_I32Arr_Get_Size(a))
+ nums := make([]int32, size)
+ for i := 0; i < size; i++ {
+ nums[i] = int32(C.LUCY_I32Arr_Get(a, C.uint32_t(i)))
+ }
+ return nums
+}