I'm wondering how to conduct a site search that takes search words and matches them in more than one field. So for example if I have an entry with fields that contain the following words:

Description Field: foo

Body Field: bar baz

A search for 'foo', or 'bar', or 'bar baz' finds the entry, but a search for 'foo bar' does not.

I have rebuilt the search index.

  • I'm using set entries = craft.entries.search(query).order('score') to conduct the search Jun 26 '15 at 0:29

foo bar implies foo AND bar by default. What you're probably looking for is foo OR bar.

If you look at craft_searchindex, you can see that keywords for fields are indexed on a per field basis, which is why you'd need the OR to search across multiple fields.

You can omit OR if you already know the field names ahead of time, though. field1:foo field2:bar.

You can see more search syntax options here.

  • No, I am looking for foo AND bar, just as I am looking for bar AND baz. The former are found across two fields whereas the latter is in one field. Jun 26 '15 at 0:44
  • Updated my answer.
    – Brad Bell
    Jun 26 '15 at 1:05
  • Thanks Brad. What I am really looking for is a site search solution that an end user can use to search the whole site (which usually involves many sections and fields). So what you are suggesting is that I have to take the search string and apply it across all sections and fields to effectively join them up. Jun 26 '15 at 2:45
  • You can have the search form submit to a custom plugin that does whatever processing/manipulation on the search string it needs to before passing it on to Craft.
    – Brad Bell
    Jun 26 '15 at 5:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.