Tune and test Go bindings for PostingListReader.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/e5e4232b Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/e5e4232b Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/e5e4232b Branch: refs/heads/master Commit: e5e4232b6c0c8d22f46c6db5430fb92ee949c855 Parents: 3358bc2 Author: Marvin Humphrey <[email protected]> Authored: Thu Dec 10 19:03:15 2015 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Thu Dec 10 19:04:59 2015 -0800 ---------------------------------------------------------------------- go/build.go | 4 ++++ go/lucy/index.go | 16 ++++++++++++++++ go/lucy/index_test.go | 19 ++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/e5e4232b/go/build.go ---------------------------------------------------------------------- diff --git a/go/build.go b/go/build.go index 36b487d..604a9a9 100644 --- a/go/build.go +++ b/go/build.go @@ -224,6 +224,10 @@ func specClasses(parcel *cfc.Parcel) { lexReaderBinding.SpecMethod("Fetch_Term_Info", "fetchTermInfo(string, interface{}) (TermInfo, error)") lexReaderBinding.Register() + pListReaderBinding := cfc.NewGoClass(parcel, "Lucy::Index::PostingListReader") + pListReaderBinding.SpecMethod("Posting_List", "PostingList(string, interface{}) (PostingList, error)") + pListReaderBinding.Register() + bgMergerBinding := cfc.NewGoClass(parcel, "Lucy::Index::BackgroundMerger") bgMergerBinding.SpecMethod("Prepare_Commit", "PrepareCommit() error") bgMergerBinding.SpecMethod("Commit", "Commit() error") http://git-wip-us.apache.org/repos/asf/lucy/blob/e5e4232b/go/lucy/index.go ---------------------------------------------------------------------- diff --git a/go/lucy/index.go b/go/lucy/index.go index a0e3396..1f5a752 100644 --- a/go/lucy/index.go +++ b/go/lucy/index.go @@ -22,6 +22,7 @@ package lucy #include "Lucy/Index/DataReader.h" #include "Lucy/Index/DocReader.h" #include "Lucy/Index/LexiconReader.h" +#include "Lucy/Index/PostingListReader.h" #include "Lucy/Index/HighlightReader.h" #include "Lucy/Index/SortReader.h" #include "Lucy/Index/IndexManager.h" @@ -529,6 +530,21 @@ func (lr *LexiconReaderIMP) fetchTermInfo(field string, term interface{}) (retva return retval, err } +func (p *PostingListReaderIMP) PostingList(field string, term interface{}) (retval PostingList, err error) { + err = clownfish.TrapErr(func() { + self := (*C.lucy_PostingListReader)(clownfish.Unwrap(p, "p")) + fieldC := (*C.cfish_String)(clownfish.GoToClownfish(field, unsafe.Pointer(C.CFISH_STRING), false)) + defer C.cfish_decref(unsafe.Pointer(fieldC)) + termC := (*C.cfish_Obj)(clownfish.GoToClownfish(term, unsafe.Pointer(C.CFISH_OBJ), true)) + defer C.cfish_decref(unsafe.Pointer(termC)) + retvalCF := C.LUCY_PListReader_Posting_List(self, fieldC, termC) + if retvalCF != nil { + retval = clownfish.ToGo(unsafe.Pointer(retvalCF)).(PostingList) + } + }) + return retval, err +} + func (h *HighlightReaderIMP) FetchDocVec(docID int32) (retval DocVector, err error) { err = clownfish.TrapErr(func() { self := (*C.lucy_HighlightReader)(clownfish.Unwrap(h, "h")) http://git-wip-us.apache.org/repos/asf/lucy/blob/e5e4232b/go/lucy/index_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go index 18d1e22..0143fcf 100644 --- a/go/lucy/index_test.go +++ b/go/lucy/index_test.go @@ -681,7 +681,7 @@ func TestPostingListBasics(t *testing.T) { ixReader, _ := OpenIndexReader(folder, nil, nil) segReaders := ixReader.SegReaders() pListReader := segReaders[0].Fetch("Lucy::Index::PostingListReader").(PostingListReader) - pList := pListReader.PostingList("content", nil) + pList, _ := pListReader.PostingList("content", nil) pList.Seek("b") if docFreq := pList.GetDocFreq(); docFreq != 2 { t.Errorf("GetDocFreq: %d", docFreq) @@ -849,6 +849,23 @@ func TestLexReaderMisc(t *testing.T) { runDataReaderCommon(t, lexReader, false) } +func TestPostingListReaderMisc(t *testing.T) { + folder := createTestIndex("a", "b", "c") + ixReader, _ := OpenIndexReader(folder, nil, nil) + segReaders := ixReader.SegReaders() + pListReader := segReaders[0].Fetch("Lucy::Index::PostingListReader").(PostingListReader) + if got, err := pListReader.PostingList("content", nil); got == nil || err != nil { + t.Errorf("PostingList should succeed: %v", err) + } + if got, err := pListReader.PostingList("content", "foo"); got == nil || err != nil { + t.Errorf("PostingList with term should succeed: %v", err) + } + if got, err := pListReader.PostingList("nope", nil); got != nil || err != nil { + t.Errorf("PostingList for non-field should return nil: %v", err) + } + runDataReaderCommon(t, pListReader, false) +} + func TestHighlightReaderMisc(t *testing.T) { folder := createTestIndex("a", "b", "c") ixReader, _ := OpenIndexReader(folder, nil, nil)
