# Grep-like search help

**URL:** <https://www.ruby-forum.com/t/grep-like-search-help/159683>\
**Category:** Rails\
**Created:** [February 7, 2009, 2:58am UTC](https://www.ruby-forum.com/t/grep-like-search-help/159683 "2009-02-07T02:58:32Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![toltec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ed655f/32.png) [@toltec](https://www.ruby-forum.com/u/toltec)\
**Post date:** [February 7, 2009, 2:58am UTC](https://www.ruby-forum.com/t/grep-like-search-help/159683/1 "2009-02-07T02:58:32Z")

</div>

Hello, noob here.

I have a table called ‘entries’ with lots of sentences, one per row  
(id). I need to find specific sentences that have the words I’m looking  
for anywhere in them. For example:

> 1. The bird entered the kitchen through the door.
> 
> 2. You left the door of your car open.
> 
> 3. Close the window or the bird will get out of the car.

If I search for ‘bird’ and ‘door’, I want only the sentence with the id  
1 to come up. If I search for ‘door’ and ‘car’, I want only the sentence  
with the id 2 to come up. If I search for ‘bird’ and ‘car’, I want only  
the sentence with the id 3 to come up.

So, basically, what this grep command would do:

> cat my.file | grep bird | grep door

But I’m not getting anywhere with any search technique or plugin I’ve  
tried so far. Any ideas?

---

<div class="post-metadata">

**Author:** ![toltec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ed655f/32.png) [@toltec](https://www.ruby-forum.com/u/toltec)\
**Post date:** [February 7, 2009, 3:23am UTC](https://www.ruby-forum.com/t/grep-like-search-help/159683/2 "2009-02-07T03:23:34Z")

</div>

isn’t that just the condition

‘sentence like %bird%door%’?

Although that will only get them where they appear in that particular  
order. You could interate all the possibilities

ie conditions =\> [‘sentence like %bird%door% or sentence like  
%door%bird%’] but that will get messy the more words you have in your  
search.

but there might be something else you can do in SQL.

Cheers  
Simon

---

<div class="post-metadata">

**Author:** ![toltec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ed655f/32.png) [@toltec](https://www.ruby-forum.com/u/toltec)\
**Post date:** [February 7, 2009, 3:55am UTC](https://www.ruby-forum.com/t/grep-like-search-help/159683/3 "2009-02-07T03:55:41Z")

</div>

Simon M. wrote:

> but that will get messy the more words you have in your  
> search.

Yeah, I was figuring I was gonna have to do something like an ‘explode’  
with the search terms at some point.

---

<div class="post-metadata">

**Author:** ![toltec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ed655f/32.png) [@toltec](https://www.ruby-forum.com/u/toltec)\
**Post date:** [February 7, 2009, 11:21am UTC](https://www.ruby-forum.com/t/grep-like-search-help/159683/4 "2009-02-07T11:21:24Z")

</div>

Would  
conditions =\> [‘sentence like %bird% and sentence like %door%’]  
do the job?

2009/2/7 Ralph W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![toltec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ed655f/32.png) [@toltec](https://www.ruby-forum.com/u/toltec)\
**Post date:** [February 7, 2009, 4:44pm UTC](https://www.ruby-forum.com/t/grep-like-search-help/159683/5 "2009-02-07T16:44:28Z")

</div>

On Fri, Feb 6, 2009 at 5:58 PM, Ralph W.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I have a table called ‘entries’ with lots of sentences, one per row  
> (id). I need to find specific sentences that have the words I’m looking  
> for anywhere in them.

If you’re using MySQL, you can create a FULLTEXT index on the  
field(s) in question and use MATCH:

[http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html](http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html)

Other RDBMSs may have an equivalent.

## HTH,

Hassan S. ------------------------ removed\_email\_address@domain.invalid
