<HTML>
<HEAD>
<TITLE>Search Tips for netbeans.org Searches</TITLE>
<META NAME="description" CONTENT="Search netbeans.org website and mailing list archives">
<link rel="stylesheet" type="text/css" href="../netbeans.css">
</HEAD>

<BODY>

<h1>Search Tips</h1>

<P><h2>Searching Website Content</h2>

<BR>Use the Google search form to search normal netbeans.org website
content.  Syntax is very straight forward :

<P><UL>
<LI><B>Case insensitive</B> - search terms are <I>not</I> case-sensitive<P></LI>

<LI><B>Automatic "AND" queries</B> - only pages including all of your
search keywords will be returned<P></LI>

<LI><B>Automatic exclusion of common words</B> - common words like
"and" or "where" will be excluded from the search.  To force a common
word to be included, use "+" for example "+where"<P></LI>

<LI><B>Exact phrase</B> - Use quotes to specify an exact phrase
to search for, eg "XML parser"<P></LI>

</UL>
<!--

For more help see <A HREF="http://www.google.com/help/basics.html">Google's search tips page</A>.

<BR>Use the Website content form to keyword search all website
content - this includes not only the content of pages on
https://netbeans.org/, but also <I>all</I> other module websites
(http://core.netbeans.org/, https://netbeans.org/projects/guibuilder/ ... etc).

<P>Use boolean operators to refine your search : <B>AND</B>,
<B>OR</B>, and <B>NOT</B>.  Use combinations of these to define more
complex searches :

<P><UL>
<LI><B>http javadoc</B> : When more than one word is used without
a boolean operator, they are automatically <I>AND</I>ed, this search
is equivalent to <B>http and javadoc</B>, and will search for documents
with both the words "http" AND "javadoc".<P></LI>

<LI><B>http and javadoc not issue</B> will search for documents
containing both "http" <I>AND</I> "javadoc", but <I>NOT</I> "issue".<P></LI>

<LI><B>Do not use metachars, including quotes</B> - due to a bug in the search
implementation, metacharacters (like "*:()&gt; etc) should not be
included in your searches.  See <A HREF="https://netbeans.org/bugzilla/show_bug.cgi?id=13172">issue 13172</A>
and for more info.

</UL>
-->
<P><h2><a name="other">Searching other content types on netbeans.org</a></h2>

<p>You can limit the scope of your search by selecting either <i>Entire netbeans.org domain</i> or <i>www module only</i> in the drop down box inside the search form. The default scope is <i>Entire netbeans.org domain</i>. Type the word or phrase you wish to search for in the <i>Search string</i> field and click the <i>Search</i> button.</p>

<p>You can limit <i>artifacts</i> which will be searched. Eg you can only search for specific <i>module</i>, <i>HTML content</i>, <i>Issues</i>. It is possible to select more than one item (use Shift+right click). If you do not select any, all artifact will be searched.</p>

<P>You can also use quoted phrases, and the + / - signs to give the
engine hints about what you're looking for.  Some examples :

<UL>
<LI><B>http javadoc</B> : using multiple words in your search
will search for messages matching <I>ANY</I> of your keywords.
eg searching for http javadoc will find any mail messages
including the word "http" AND/OR any messages containing the word
"javadoc".<P></LI>

<LI><B>+http +javadoc</B> : use "+" to indicate this word must be
present in any hits.  This search would return only documents that
include <I>BOTH</I> the word "http" and the word "javadoc".<P></LI>

<LI><B>+http +javadoc -issue</B> : use "-" to exclude certain words
from your results.  eg this search would return return only documents that
include <I>BOTH</I> the word "http" and the word "javadoc", and <I>NOT</I>

the word "issue".<P></LI>

<LI><B>"http javadoc"</B> : use quotes to match exact phrases.<P></LI>

<LI><B>Do not use metachars</B> - due to a bug in the search
implementation, metacharacters (like *:()&gt; etc) should not be
included in your searches.  See <A HREF="https://netbeans.org/bugzilla/show_bug.cgi?id=13172">issue 13172</A>
for more info.
</UL>

<P><A HREF="search.html">Back to the Search form</A> ...
</BODY>
</HTML>
