<!doctype html>
<html>
  <head>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE- 2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<link href="/theme/css/lucene/global.css?v=0e493d7a" rel="stylesheet" type="text/css">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<meta name="Distribution" content="Global"/>
<meta name="Robots" content="index,follow"/>

<script type="text/javascript" src="/theme/javascript/lucene/prototype.js?v=0e493d7a"></script>
<script type="text/javascript" src="/theme/javascript/lucene/effects.js?v=0e493d7a"></script>
<script type="text/javascript" src="/theme/javascript/lucene/slides.js?v=0e493d7a"></script>
<script src="https://www.apachecon.com/event-images/snippet.js"></script>    <title>Apache Lucene - Welcome to Apache Lucene</title>
<meta name="keywords"
       content="apache, apache lucene, apache solr, solr, lucene
       search, information retrieval, spell checking, faceting, inverted index,
       open source"/>    <meta property="og:type" content="website" />
    <meta property="og:url" content="https://lucene.apache.org/index.html"/>
    <meta property="og:title" content="Welcome to Apache Lucene"/>
    <meta property="og:description" content=""/>
    <meta property="og:image" content="https://lucene.apache.org/theme/images/lucene/lucene_og_image.png?v=0e493d7a"/>
    <meta property="og:image:secure_url" content="https://lucene.apache.org/theme/images/lucene/lucene_og_image.png?v=0e493d7a"/>
<link rel="shortcut icon" type="image/png"
                                                 href="/theme/images/lucene/lucene-favicon.png?v=0e493d7a"/>  </head>
  <body id="home">
    <div id="wrap">
      <div id="header">
        <div id="logo" style="float:left">
          <a href="/">
            <img border="0" src="/theme/images/lucene/lucene_logo_green_300.png?v=0e493d7a" alt="Lucene Logo"/>
          </a>
        </div>
<!-- TODO: Search disabled as it does not work, 2021-02-21
<div id="search" style="float:right;zoom:1">
  <form id="quick-search" method="GET" action="https://sematext.com/opensee/lucene" name="searchform">
    <fieldset>
      <input type="search" id="q" name="q" placeholder="Search with Apache Solr..." class="class1 class2 hint" accesskey="q">
    </fieldset>
  </form>
</div>-->
        <div id="nav">
          <ul>
<li><a href="/core/">Core (Java)</a></li>
<li><a class="last" href="/pylucene/index.html">PyLucene</a></li>
          </ul>
        </div>

<div id="slides">
  <div class="slideshow" id="mantleSlides">
<div id="slide1" >
  <div class="callout">
    Ultra-fast Search Library<br/>
  </div>
  <div class="descwrapper"><div class="description">
      Apache Lucene set the standard for search and indexing performance.
      Lucene is the search core of both Apache Solr™ and Elasticsearch™.
    </div></div>
    <div class="mantle">
      <img alt="Apache Lucene" src="/theme/images/lucene/tlp/mantle-lucene.png?v=0e493d7a"/>
    </div>
</div>
<div id="slide2" style="display:none">
  <div class="callout">
    Proven search capabilities<br/>
  </div>
  <div class="descwrapper"><div class="description">
      Our core algorithms along with the Solr search server power applications the world over, ranging
      from mobile devices to sites like Twitter, Apple and Wikipedia.
    </div></div>
    <div class="mantle">
      <img alt="Lucene Power" src="/theme/images/lucene/mantle-power.png?v=0e493d7a"/>
    </div>
</div>
<div id="slide3" style="display:none">
  <div class="callout">
    Large, Vibrant community
  </div>
  <div class="descwrapper"><div class="description">
      The goal of Apache Lucene is to provide world class search capabilities
    </div></div>
    <div class="mantle">
      <img alt="Apache Mahout community" src="/theme/images/lucene/tlp/mantle-community.png?v=0e493d7a"/>
    </div>
</div>
<div id="slide4" style="display:none">
  <div class="callout">
    Apache 2.0 licensed
  </div>
  <div class="descwrapper"><div class="description">
      Apache Lucene is distributed under a commercially friendly Apache Software license
    </div></div>
    <div class="mantle">
      <img alt="Apache Software Foundation" src="/theme/images/lucene/mantle-asf.png?v=0e493d7a"/>
    </div>
</div>  </div>
  <div class="controls">
    <a class="next" id="next" title="Next" href="#">Next</a>
    <a class="previous" id="previous" title="Previous" href="#">Previous</a>
    <a class="start" id="start" title="Start" href="#" style="display: none; ">Start</a>
    <a class="stop" id="stop" title="Stop" href="#">Stop</a>
  </div>

  <script type="text/javascript">
    function StartSlides() {
      new Slides('mantleSlides');
    }
document.observe('dom:loaded', StartSlides);
  </script>
</div> <!-- End #slides -->
      </div> <!-- End #header -->

      <div id="content-wrap" class="clearfix">
        <div id="main">
<div>
  <h1 class="title">Welcome to Apache Lucene</h1>
  
</div>


<p>
  The Apache Lucene™ project develops open-source search
  software. The project releases a core search library, named Lucene™ core,
  as well as PyLucene, a python binding for Lucene.
</p>

<div id="col1">
  <p><a href="/core/">Lucene Core</a> is a Java library providing powerful indexing and search features,
  as well as spellchecking, hit highlighting and advanced analysis/tokenization capabilities. The <a href="/pylucene/">PyLucene</a>
    sub project provides Python bindings for Lucene Core.
  </p>
</div>
<div id="col2">
  <h2 id="lucene-core-news">Latest Lucene Core News</h2>
  <div>
    <p id="apache-lucenetm-9100-available">
      <a href="/core/corenews.html#apache-lucenetm-9100-available">Apache Lucene™ 9.10.0 available</a> <span class="news-date">(20.Feb)</span>
    </p>
    <p id="apache-lucenetm-8113-available">
      <a href="/core/corenews.html#apache-lucenetm-8113-available">Apache Lucene™ 8.11.3 available</a> <span class="news-date">(08.Feb)</span>
    </p>
    <p id="apache-lucenetm-992-available">
      <a href="/core/corenews.html#apache-lucenetm-992-available">Apache Lucene™ 9.9.2 available</a> <span class="news-date">(29.Jan)</span>
    </p>
  </div>
</div>
<br clear="all"/>
<hr/>
<div>
  <p>
    <a href="https://solr.apache.org/">
      <img src="/theme/images/solr/Solr_Logo_200x101.png?v=0e493d7a" width="100" alt="Solr Logo" align="left" class="solrlogo" />
    </a>
    <b>ANNOUNCEMENT:</b> The <a href="https://solr.apache.org/">Solr™</a>
    sub project has moved to a separate Top Level Project (TLP). All things Solr can now be found at
    <a href="https://solr.apache.org/">https://solr.apache.org/</a>. Mailing lists and git repositories have changed,
    please see details on the Solr website.
  </p>
</div>
<br clear="all"/>
<hr/>
<br clear="all"/>

<div>
  <h2 id="the-apache-software-foundation">The Apache Software Foundation
    <a class="headerlink" href="#the-apache-software-foundation" title="Permanent link">¶</a>
  </h2>
  <p>The <a href="https://www.apache.org">Apache Software Foundation</a> provides support for the Apache community of open-source software projects. The Apache projects are defined by collaborative consensus based processes, an open, pragmatic software license and a desire to create high quality software that leads the way in its field. Apache Lucene, Apache Solr, Apache PyLucene, Apache Open Relevance Project and their respective logos are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
</div>        </div>
        <div id="sidebar">
<div class="button-green">
  <a href="/core/downloads.html">Download</a>
  <div class="flap top">Click to</div>
  <div class="flap bottom">Apache Lucene 9.10.0</div>
</div>
<div class="download-desc">Apache Lucene 9.10.0</div>

<h1 id="projects">Projects<a class="headerlink" href="#projects" title="Permanent link">¶</a></h1>
<ul>
  <li><a href="/core/">Lucene Core (Java)</a></li>
  <li><a href="/pylucene/">PyLucene</a></li>
  <li><a href="/openrelevance/">Open Relevance (Discontinued)</a></li>
</ul>

<h1 id="about">About<a class="headerlink" href="#about" title="Permanent link">¶</a></h1>
<ul>
  <li><a href="https://www.apache.org/licenses/">License</a></li>
  <li><a href="/whoweare.html">Who We are</a></li>
  <li><a href="/news.html">TLP News</a></li>
  <li><a href="/code-of-conduct.html">Code of Conduct</a></li>
</ul>

<h1 id="events">Events<a class="headerlink" href="#events" title="Permanent link">¶</a></h1>
<ul>
  <a class="acevent" data-format="square" data-mode="light" data-width="160" data-style="border: 1px solid lightgrey"></a>
</ul>

<h1 id="asf-links">ASF links<a class="headerlink" href="#asf-links" title="Permanent link">¶</a></h1>
<ul>
  <li><a href="https://www.apache.org">Apache Software Foundation</a></li>
  <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
  <li><a href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
  <li><a href="https://www.apache.org/security/">Security</a></li>
</ul>

<h1 id="editing-this-site">Editing This Site<a class="headerlink" href="#editing-this-site" title="Permanent link">¶</a></h1>
<ul>
  <li><a href="site-instructions.html">Instructions</a></li>
  <li><a href="http://daringfireball.net/projects/markdown/syntax">Markdown</a></li>
</ul>

<h1 id="related-projects">Related Projects<a class="headerlink" href="#related-projects" title="Permanent link">¶</a></h1>
<ul>
  <li><a href="https://solr.apache.org">Apache Solr</a></li>
  <li><a href="http://hadoop.apache.org">Apache Hadoop</a></li>
  <li><a href="http://manifoldcf.apache.org/">Apache ManifoldCF</a></li>
  <li><a href="http://lucenenet.apache.org/">Apache Lucene.Net</a></li>
  <li><a href="http://mahout.apache.org">Apache Mahout</a></li>
  <li><a href="http://nutch.apache.org">Apache Nutch</a></li>
  <li><a href="http://opennlp.apache.org/">Apache OpenNLP</a></li>
  <li><a href="http://tika.apache.org">Apache Tika</a></li>
  <li><a href="http://zookeeper.apache.org">Apache Zookeeper</a></li>
</ul>        </div>
      </div> <!-- End #content-wrap -->

<div id="footer">
  <div class="copyright">
    <p>
      Copyright &copy; 2011-2024 The Apache Software Foundation, Licensed under
      the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.  <a href="/privacy.html">Privacy Policy</a>      <br/>
      Apache and the Apache feather logo are trademarks of The Apache Software Foundation.  Apache Lucene, Apache Solr and their
      respective logos are trademarks of the Apache Software Foundation.  Please see the <a href="https://www.apache.org/foundation/marks/">Apache Trademark Policy</a>
      for more information.
    </p>
  </div>
</div>    </div> <!-- End #wrap -->
  </body>
</html>