Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Lucene: Java-User

best way to iterate through all docs from a query

 

 

Lucene java-user RSS feed   Index | Next | Previous | View Threaded


deswiatlowski at syrres

Nov 19, 2009, 7:36 AM

Post #1 of 8 (947 views)
Permalink
best way to iterate through all docs from a query

What is the best way to iterate across all the documents in a search results?
Previously I was using the deprecated Hits object but changed the
implentations as recommended in javadocs to ScoreDoc.

I've tried the following but I've seen warning about peformance.
Seems the first time I query something it takes long time and then after
that it is quick.



for (int i = 0; i < mNumberOfHits; i++)
{

int docId = hits[i].doc;
Document doc = searcher.doc(docId);
}

Here's the code for the search
What is good number to pass intot TopDocCollector?

TopDocCollector collector = new TopDocCollector(1000000);
searcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
--
View this message in context: http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26421373.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
For additional commands, e-mail: java-user-help [at] lucene


uwe at thetaphi

Nov 19, 2009, 7:48 AM

Post #2 of 8 (896 views)
Permalink
RE: best way to iterate through all docs from a query [In reply to]

Simply create an own Collector (or HitCollector for Lucene < 2.9). Nothing
more to do.

-----
Uwe Schindler
H.-H.-Meier-Allee 63, D-28213 Bremen
http://www.thetaphi.de
eMail: uwe [at] thetaphi


> -----Original Message-----
> From: it99 [mailto:deswiatlowski [at] syrres]
> Sent: Thursday, November 19, 2009 4:37 PM
> To: java-user [at] lucene
> Subject: best way to iterate through all docs from a query
>
>
> What is the best way to iterate across all the documents in a search
> results?
> Previously I was using the deprecated Hits object but changed the
> implentations as recommended in javadocs to ScoreDoc.
>
> I've tried the following but I've seen warning about peformance.
> Seems the first time I query something it takes long time and then after
> that it is quick.
>
>
>
> for (int i = 0; i < mNumberOfHits; i++)
> {
>
> int docId = hits[i].doc;
> Document doc = searcher.doc(docId);
> }
>
> Here's the code for the search
> What is good number to pass intot TopDocCollector?
>
> TopDocCollector collector = new TopDocCollector(1000000);
> searcher.search(query, collector);
> ScoreDoc[] hits = collector.topDocs().scoreDocs;
> --
> View this message in context: http://old.nabble.com/best-way-to-iterate-
> through-all-docs-from-a-query-tp26421373p26421373.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> For additional commands, e-mail: java-user-help [at] lucene



---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
For additional commands, e-mail: java-user-help [at] lucene


ian.lea at gmail

Nov 19, 2009, 8:03 AM

Post #3 of 8 (896 views)
Permalink
Re: best way to iterate through all docs from a query [In reply to]

First queries are often slow and subsequent ones faster. Search the
list for warming - I think there was something on it in the last
couple of days. Or read the "When measuring performance, disregard
the first query" bit of
http://wiki.apache.org/lucene-java/ImproveSearchingSpeed

A good number to pass to the Collector is however many docs you are
going to be interested in. If you are just going to display the first
10, pass 10.


--
Ian.


On Thu, Nov 19, 2009 at 3:36 PM, it99 <deswiatlowski [at] syrres> wrote:
>
> What is the best way to iterate across all the documents in a search results?
> Previously I was using the deprecated Hits object but changed the
> implentations as recommended in javadocs to ScoreDoc.
>
> I've tried the following but I've seen warning about peformance.
> Seems the first time I query something it takes long time and then after
> that it is quick.
>
>
>
>                for (int i = 0; i < mNumberOfHits; i++)
>                {
>
>                    int docId = hits[i].doc;
>                    Document doc = searcher.doc(docId);
>                }
>
> Here's the code for the search
> What is good number to pass intot TopDocCollector?
>
>            TopDocCollector collector = new TopDocCollector(1000000);
>            searcher.search(query, collector);
>            ScoreDoc[] hits = collector.topDocs().scoreDocs;
> --
> View this message in context: http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26421373.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> For additional commands, e-mail: java-user-help [at] lucene
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
For additional commands, e-mail: java-user-help [at] lucene


deswiatlowski at syrres

Nov 20, 2009, 7:17 AM

Post #4 of 8 (872 views)
Permalink
Re: best way to iterate through all docs from a query [In reply to]

Thanks that helped a lot with the speed!!
I am getting same search results but with different docIds. Is this expected
and OK? Are they just arbitrar numbers

If I changed from
Hits hits = mSearcher.search(query, filter);


To the following
TopDocCollector collector = new TopDocCollector(1000000);
mSearcher.search(query, filter,collector);
hits = collector.topDocs().scoreDocs;







Ian Lea wrote:
>
> First queries are often slow and subsequent ones faster. Search the
> list for warming - I think there was something on it in the last
> couple of days. Or read the "When measuring performance, disregard
> the first query" bit of
> http://wiki.apache.org/lucene-java/ImproveSearchingSpeed
>
> A good number to pass to the Collector is however many docs you are
> going to be interested in. If you are just going to display the first
> 10, pass 10.
>
>
> --
> Ian.
>
>
> On Thu, Nov 19, 2009 at 3:36 PM, it99 <deswiatlowski [at] syrres> wrote:
>>
>> What is the best way to iterate across all the documents in a search
>> results?
>> Previously I was using the deprecated Hits object but changed the
>> implentations as recommended in javadocs to ScoreDoc.
>>
>> I've tried the following but I've seen warning about peformance.
>> Seems the first time I query something it takes long time and then after
>> that it is quick.
>>
>>
>>
>>                for (int i = 0; i < mNumberOfHits; i++)
>>                {
>>
>>                    int docId = hits[i].doc;
>>                    Document doc = searcher.doc(docId);
>>                }
>>
>> Here's the code for the search
>> What is good number to pass intot TopDocCollector?
>>
>>            TopDocCollector collector = new TopDocCollector(1000000);
>>            searcher.search(query, collector);
>>            ScoreDoc[] hits = collector.topDocs().scoreDocs;
>> --
>> View this message in context:
>> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26421373.html
>> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
>> For additional commands, e-mail: java-user-help [at] lucene
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> For additional commands, e-mail: java-user-help [at] lucene
>
>
>

--
View this message in context: http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26442733.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
For additional commands, e-mail: java-user-help [at] lucene


erickerickson at gmail

Nov 20, 2009, 8:49 AM

Post #5 of 8 (869 views)
Permalink
Re: best way to iterate through all docs from a query [In reply to]

The doc IDs should be consistent *unless* you did anything to the
index, things you might not think would change anything. For instance,
any kind of commit (assuming you'd ever deleted a document, say). etc.

So if you haven't changed your index at all, your doc IDs won't change.
But as I said, some operations you don't think would change your doc IDs
actually will....

HTH
Erick

On Fri, Nov 20, 2009 at 10:17 AM, it99 <deswiatlowski [at] syrres> wrote:

>
> Thanks that helped a lot with the speed!!
> I am getting same search results but with different docIds. Is this
> expected
> and OK? Are they just arbitrar numbers
>
> If I changed from
> Hits hits = mSearcher.search(query, filter);
>
>
> To the following
> TopDocCollector collector = new TopDocCollector(1000000);
> mSearcher.search(query, filter,collector);
> hits = collector.topDocs().scoreDocs;
>
>
>
>
>
>
>
> Ian Lea wrote:
> >
> > First queries are often slow and subsequent ones faster. Search the
> > list for warming - I think there was something on it in the last
> > couple of days. Or read the "When measuring performance, disregard
> > the first query" bit of
> > http://wiki.apache.org/lucene-java/ImproveSearchingSpeed
> >
> > A good number to pass to the Collector is however many docs you are
> > going to be interested in. If you are just going to display the first
> > 10, pass 10.
> >
> >
> > --
> > Ian.
> >
> >
> > On Thu, Nov 19, 2009 at 3:36 PM, it99 <deswiatlowski [at] syrres> wrote:
> >>
> >> What is the best way to iterate across all the documents in a search
> >> results?
> >> Previously I was using the deprecated Hits object but changed the
> >> implentations as recommended in javadocs to ScoreDoc.
> >>
> >> I've tried the following but I've seen warning about peformance.
> >> Seems the first time I query something it takes long time and then after
> >> that it is quick.
> >>
> >>
> >>
> >> for (int i = 0; i < mNumberOfHits; i++)
> >> {
> >>
> >> int docId = hits[i].doc;
> >> Document doc = searcher.doc(docId);
> >> }
> >>
> >> Here's the code for the search
> >> What is good number to pass intot TopDocCollector?
> >>
> >> TopDocCollector collector = new TopDocCollector(1000000);
> >> searcher.search(query, collector);
> >> ScoreDoc[] hits = collector.topDocs().scoreDocs;
> >> --
> >> View this message in context:
> >>
> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26421373.html
> >> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> >> For additional commands, e-mail: java-user-help [at] lucene
> >>
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> > For additional commands, e-mail: java-user-help [at] lucene
> >
> >
> >
>
> --
> View this message in context:
> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26442733.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> For additional commands, e-mail: java-user-help [at] lucene
>
>


deswiatlowski at syrres

Nov 20, 2009, 12:21 PM

Post #6 of 8 (857 views)
Permalink
Re: best way to iterate through all docs from a query [In reply to]

Thanks for the info!
I was comparing from the Hits the nth number in the set number to
the documentId so that's why they are different. Is there anyway to get the
'nth number in set' if you have the docId without using the Hits object? Or
is that a Hits only thing?



Erick Erickson wrote:
>
> The doc IDs should be consistent *unless* you did anything to the
> index, things you might not think would change anything. For instance,
> any kind of commit (assuming you'd ever deleted a document, say). etc.
>
> So if you haven't changed your index at all, your doc IDs won't change.
> But as I said, some operations you don't think would change your doc IDs
> actually will....
>
> HTH
> Erick
>
> On Fri, Nov 20, 2009 at 10:17 AM, it99 <deswiatlowski [at] syrres> wrote:
>
>>
>> Thanks that helped a lot with the speed!!
>> I am getting same search results but with different docIds. Is this
>> expected
>> and OK? Are they just arbitrar numbers
>>
>> If I changed from
>> Hits hits = mSearcher.search(query, filter);
>>
>>
>> To the following
>> TopDocCollector collector = new TopDocCollector(1000000);
>> mSearcher.search(query, filter,collector);
>> hits = collector.topDocs().scoreDocs;
>>
>>
>>
>>
>>
>>
>>
>> Ian Lea wrote:
>> >
>> > First queries are often slow and subsequent ones faster. Search the
>> > list for warming - I think there was something on it in the last
>> > couple of days. Or read the "When measuring performance, disregard
>> > the first query" bit of
>> > http://wiki.apache.org/lucene-java/ImproveSearchingSpeed
>> >
>> > A good number to pass to the Collector is however many docs you are
>> > going to be interested in. If you are just going to display the first
>> > 10, pass 10.
>> >
>> >
>> > --
>> > Ian.
>> >
>> >
>> > On Thu, Nov 19, 2009 at 3:36 PM, it99 <deswiatlowski [at] syrres> wrote:
>> >>
>> >> What is the best way to iterate across all the documents in a search
>> >> results?
>> >> Previously I was using the deprecated Hits object but changed the
>> >> implentations as recommended in javadocs to ScoreDoc.
>> >>
>> >> I've tried the following but I've seen warning about peformance.
>> >> Seems the first time I query something it takes long time and then
>> after
>> >> that it is quick.
>> >>
>> >>
>> >>
>> >> for (int i = 0; i < mNumberOfHits; i++)
>> >> {
>> >>
>> >> int docId = hits[i].doc;
>> >> Document doc = searcher.doc(docId);
>> >> }
>> >>
>> >> Here's the code for the search
>> >> What is good number to pass intot TopDocCollector?
>> >>
>> >> TopDocCollector collector = new TopDocCollector(1000000);
>> >> searcher.search(query, collector);
>> >> ScoreDoc[] hits = collector.topDocs().scoreDocs;
>> >> --
>> >> View this message in context:
>> >>
>> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26421373.html
>> >> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
>> >> For additional commands, e-mail: java-user-help [at] lucene
>> >>
>> >>
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
>> > For additional commands, e-mail: java-user-help [at] lucene
>> >
>> >
>> >
>>
>> --
>> View this message in context:
>> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26442733.html
>> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
>> For additional commands, e-mail: java-user-help [at] lucene
>>
>>
>
>

--
View this message in context: http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26447343.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
For additional commands, e-mail: java-user-help [at] lucene


erickerickson at gmail

Nov 20, 2009, 4:16 PM

Post #7 of 8 (858 views)
Permalink
Re: best way to iterate through all docs from a query [In reply to]

Unless I'm way off base, that's what the ScoreDocs[] array is all about....

Best
Erick

On Fri, Nov 20, 2009 at 3:21 PM, it99 <deswiatlowski [at] syrres> wrote:

>
> Thanks for the info!
> I was comparing from the Hits the nth number in the set number to
> the documentId so that's why they are different. Is there anyway to get the
> 'nth number in set' if you have the docId without using the Hits object? Or
> is that a Hits only thing?
>
>
>
> Erick Erickson wrote:
> >
> > The doc IDs should be consistent *unless* you did anything to the
> > index, things you might not think would change anything. For instance,
> > any kind of commit (assuming you'd ever deleted a document, say). etc.
> >
> > So if you haven't changed your index at all, your doc IDs won't change.
> > But as I said, some operations you don't think would change your doc IDs
> > actually will....
> >
> > HTH
> > Erick
> >
> > On Fri, Nov 20, 2009 at 10:17 AM, it99 <deswiatlowski [at] syrres> wrote:
> >
> >>
> >> Thanks that helped a lot with the speed!!
> >> I am getting same search results but with different docIds. Is this
> >> expected
> >> and OK? Are they just arbitrar numbers
> >>
> >> If I changed from
> >> Hits hits = mSearcher.search(query, filter);
> >>
> >>
> >> To the following
> >> TopDocCollector collector = new TopDocCollector(1000000);
> >> mSearcher.search(query, filter,collector);
> >> hits = collector.topDocs().scoreDocs;
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> Ian Lea wrote:
> >> >
> >> > First queries are often slow and subsequent ones faster. Search the
> >> > list for warming - I think there was something on it in the last
> >> > couple of days. Or read the "When measuring performance, disregard
> >> > the first query" bit of
> >> > http://wiki.apache.org/lucene-java/ImproveSearchingSpeed
> >> >
> >> > A good number to pass to the Collector is however many docs you are
> >> > going to be interested in. If you are just going to display the first
> >> > 10, pass 10.
> >> >
> >> >
> >> > --
> >> > Ian.
> >> >
> >> >
> >> > On Thu, Nov 19, 2009 at 3:36 PM, it99 <deswiatlowski [at] syrres>
> wrote:
> >> >>
> >> >> What is the best way to iterate across all the documents in a search
> >> >> results?
> >> >> Previously I was using the deprecated Hits object but changed the
> >> >> implentations as recommended in javadocs to ScoreDoc.
> >> >>
> >> >> I've tried the following but I've seen warning about peformance.
> >> >> Seems the first time I query something it takes long time and then
> >> after
> >> >> that it is quick.
> >> >>
> >> >>
> >> >>
> >> >> for (int i = 0; i < mNumberOfHits; i++)
> >> >> {
> >> >>
> >> >> int docId = hits[i].doc;
> >> >> Document doc = searcher.doc(docId);
> >> >> }
> >> >>
> >> >> Here's the code for the search
> >> >> What is good number to pass intot TopDocCollector?
> >> >>
> >> >> TopDocCollector collector = new TopDocCollector(1000000);
> >> >> searcher.search(query, collector);
> >> >> ScoreDoc[] hits = collector.topDocs().scoreDocs;
> >> >> --
> >> >> View this message in context:
> >> >>
> >>
> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26421373.html
> >> >> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
> >> >>
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> >> >> For additional commands, e-mail: java-user-help [at] lucene
> >> >>
> >> >>
> >> >
> >> > ---------------------------------------------------------------------
> >> > To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> >> > For additional commands, e-mail: java-user-help [at] lucene
> >> >
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >>
> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26442733.html
> >> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> >> For additional commands, e-mail: java-user-help [at] lucene
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26447343.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> For additional commands, e-mail: java-user-help [at] lucene
>
>


lucene at mikemccandless

Nov 21, 2009, 2:02 AM

Post #8 of 8 (853 views)
Permalink
Re: best way to iterate through all docs from a query [In reply to]

If you only want to gather the docIDs, this approach is rather
wasteful, as it 1) computes the score of each hit, and 2) keeps a
sorted queue of all these hits. It also pre-allocates a 1M sized
array, which is wasteful if your index doesn't have 1M docs.

It's better to create your own subclass of Collector that eg appends
each collected docID to a List or Array, or sets them in a bit set (if
you expect more than 1/8th of your index may be returned by the
query).

Mike

On Fri, Nov 20, 2009 at 10:17 AM, it99 <deswiatlowski [at] syrres> wrote:
>
> Thanks that helped a lot with the speed!!
> I am getting same search results but with different docIds. Is this expected
> and OK? Are they just arbitrar numbers
>
> If  I changed from
>            Hits hits = mSearcher.search(query, filter);
>
>
> To the following
>            TopDocCollector collector = new TopDocCollector(1000000);
>            mSearcher.search(query, filter,collector);
>            hits = collector.topDocs().scoreDocs;
>
>
>
>
>
>
>
> Ian Lea wrote:
>>
>> First queries are often slow and subsequent ones faster.  Search the
>> list for warming - I think there was something on it in the last
>> couple of days.  Or read the "When measuring performance, disregard
>> the first query" bit of
>> http://wiki.apache.org/lucene-java/ImproveSearchingSpeed
>>
>> A good number to pass to the Collector is however many docs you are
>> going to be interested in.  If you are just going to display the first
>> 10, pass 10.
>>
>>
>> --
>> Ian.
>>
>>
>> On Thu, Nov 19, 2009 at 3:36 PM, it99 <deswiatlowski [at] syrres> wrote:
>>>
>>> What is the best way to iterate across all the documents in a search
>>> results?
>>> Previously I was using the deprecated Hits object but changed the
>>> implentations as recommended in javadocs to ScoreDoc.
>>>
>>> I've tried the following but I've seen warning about peformance.
>>> Seems the first time I query something it takes long time and then after
>>> that it is quick.
>>>
>>>
>>>
>>>                for (int i = 0; i < mNumberOfHits; i++)
>>>                {
>>>
>>>                    int docId = hits[i].doc;
>>>                    Document doc = searcher.doc(docId);
>>>                }
>>>
>>> Here's the code for the search
>>> What is good number to pass intot TopDocCollector?
>>>
>>>            TopDocCollector collector = new TopDocCollector(1000000);
>>>            searcher.search(query, collector);
>>>            ScoreDoc[] hits = collector.topDocs().scoreDocs;
>>> --
>>> View this message in context:
>>> http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26421373.html
>>> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
>>> For additional commands, e-mail: java-user-help [at] lucene
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
>> For additional commands, e-mail: java-user-help [at] lucene
>>
>>
>>
>
> --
> View this message in context: http://old.nabble.com/best-way-to-iterate-through-all-docs-from-a-query-tp26421373p26442733.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
> For additional commands, e-mail: java-user-help [at] lucene
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe [at] lucene
For additional commands, e-mail: java-user-help [at] lucene

Lucene java-user RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.