mirror of https://github.com/apache/lucene.git
Merge branch 'apache-https-master' into jira/solr-8593
This commit is contained in:
commit
de3ba418a5
|
@ -0,0 +1,5 @@
|
||||||
|
This folder contains the DOAP[1] files for each project.
|
||||||
|
|
||||||
|
Upon release, these files should be updated to include new release details.
|
||||||
|
|
||||||
|
[1] DOAP: https://github.com/edumbill/doap
|
|
@ -0,0 +1,707 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-stylesheet type="text/xsl"?>
|
||||||
|
<rdf:RDF xml:lang="en"
|
||||||
|
xmlns="http://usefulinc.com/ns/doap#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:asfext="http://projects.apache.org/ns/asfext#"
|
||||||
|
xmlns:foaf="http://xmlns.com/foaf/0.1/">
|
||||||
|
<!--
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Copyright (c) 2016 The Apache Software Foundation.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
-->
|
||||||
|
<Project rdf:about="http://lucene.apache.org/core/">
|
||||||
|
<created>2001-09-01</created>
|
||||||
|
<license rdf:resource="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
|
||||||
|
<name>Apache Lucene Core</name>
|
||||||
|
<homepage rdf:resource="http://lucene.apache.org/core/" />
|
||||||
|
<asfext:pmc rdf:resource="http://lucene.apache.org" />
|
||||||
|
|
||||||
|
<shortdesc>Apache Lucene is a high-performance, full-featured text search engine library</shortdesc>
|
||||||
|
<description>Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.
|
||||||
|
</description>
|
||||||
|
<bug-database rdf:resource="http://issues.apache.org/jira/browse/LUCENE" />
|
||||||
|
<mailing-list rdf:resource="http://lucene.apache.org/core/discussion.html" />
|
||||||
|
<download-page rdf:resource="http://lucene.apache.org/core/downloads.html" />
|
||||||
|
<programming-language>Java</programming-language>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The ASF has a finite set of categories projects should use,
|
||||||
|
but the list does grow occasionally, and we should keep an eye
|
||||||
|
on it and adjust which ones we list as appropriate.
|
||||||
|
-->
|
||||||
|
<category rdf:resource="http://projects.apache.org/category/database" />
|
||||||
|
<category rdf:resource="http://projects.apache.org/category/library" />
|
||||||
|
<category rdf:resource="http://projects.apache.org/category/search" />
|
||||||
|
|
||||||
|
<wiki rdf:resource="http://wiki.apache.org/lucene-java/"/>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<GitRepository>
|
||||||
|
<location rdf:resource="https://git-wip-us.apache.org/repos/asf/lucene-solr.git"/>
|
||||||
|
</GitRepository>
|
||||||
|
</repository>
|
||||||
|
|
||||||
|
<maintainer>
|
||||||
|
<foaf:Person>
|
||||||
|
<foaf:name>Apache Lucene Team</foaf:name>
|
||||||
|
<foaf:mbox rdf:resource="mailto:dev@lucene.apache.org"/>
|
||||||
|
</foaf:Person>
|
||||||
|
</maintainer>
|
||||||
|
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-6.3.0</name>
|
||||||
|
<created>2016-11-08</created>
|
||||||
|
<revision>6.3.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-6.2.1</name>
|
||||||
|
<created>2016-09-20</created>
|
||||||
|
<revision>6.2.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-6.2.0</name>
|
||||||
|
<created>2016-08-25</created>
|
||||||
|
<revision>6.2.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-6.1.0</name>
|
||||||
|
<created>2016-06-17</created>
|
||||||
|
<revision>6.1.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-6.0.1</name>
|
||||||
|
<created>2016-05-28</created>
|
||||||
|
<revision>6.0.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-6.0.0</name>
|
||||||
|
<created>2016-04-08</created>
|
||||||
|
<revision>6.0.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.5.3</name>
|
||||||
|
<created>2016-09-09</created>
|
||||||
|
<revision>5.5.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.5.2</name>
|
||||||
|
<created>2016-06-25</created>
|
||||||
|
<revision>5.5.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.5.1</name>
|
||||||
|
<created>2016-05-05</created>
|
||||||
|
<revision>5.5.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.5.0</name>
|
||||||
|
<created>2016-02-22</created>
|
||||||
|
<revision>5.5.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.4.1</name>
|
||||||
|
<created>2016-01-23</created>
|
||||||
|
<revision>5.4.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.4.0</name>
|
||||||
|
<created>2015-12-14</created>
|
||||||
|
<revision>5.4.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.3.2</name>
|
||||||
|
<created>2016-01-23</created>
|
||||||
|
<revision>5.3.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.3.1</name>
|
||||||
|
<created>2015-09-24</created>
|
||||||
|
<revision>5.3.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.3.0</name>
|
||||||
|
<created>2015-08-21</created>
|
||||||
|
<revision>5.3.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.2.1</name>
|
||||||
|
<created>2015-06-15</created>
|
||||||
|
<revision>5.2.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.2.0</name>
|
||||||
|
<created>2015-06-07</created>
|
||||||
|
<revision>5.2.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.1.0</name>
|
||||||
|
<created>2015-04-14</created>
|
||||||
|
<revision>5.1.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-5.0.0</name>
|
||||||
|
<created>2015-02-20</created>
|
||||||
|
<revision>5.0.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.10.4</name>
|
||||||
|
<created>2015-03-03</created>
|
||||||
|
<revision>4.10.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.10.3</name>
|
||||||
|
<created>2014-12-29</created>
|
||||||
|
<revision>4.10.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.10.2</name>
|
||||||
|
<created>2014-10-31</created>
|
||||||
|
<revision>4.10.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.10.1</name>
|
||||||
|
<created>2014-09-29</created>
|
||||||
|
<revision>4.10.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.10.0</name>
|
||||||
|
<created>2014-09-03</created>
|
||||||
|
<revision>4.10.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.9.1</name>
|
||||||
|
<created>2014-09-22</created>
|
||||||
|
<revision>4.9.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.9.0</name>
|
||||||
|
<created>2014-06-25</created>
|
||||||
|
<revision>4.9.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.8.1</name>
|
||||||
|
<created>2014-05-20</created>
|
||||||
|
<revision>4.8.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.8.0</name>
|
||||||
|
<created>2014-04-28</created>
|
||||||
|
<revision>4.8.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.7.2</name>
|
||||||
|
<created>2014-04-15</created>
|
||||||
|
<revision>4.7.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.7.1</name>
|
||||||
|
<created>2014-04-02</created>
|
||||||
|
<revision>4.7.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.7.0</name>
|
||||||
|
<created>2014-02-26</created>
|
||||||
|
<revision>4.7.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.6.1</name>
|
||||||
|
<created>2014-01-28</created>
|
||||||
|
<revision>4.6.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.6.0</name>
|
||||||
|
<created>2013-11-22</created>
|
||||||
|
<revision>4.6.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.5.1</name>
|
||||||
|
<created>2013-10-24</created>
|
||||||
|
<revision>4.5.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.5</name>
|
||||||
|
<created>2013-10-05</created>
|
||||||
|
<revision>4.5</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.4</name>
|
||||||
|
<created>2013-07-23</created>
|
||||||
|
<revision>4.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.3.1</name>
|
||||||
|
<created>2013-06-18</created>
|
||||||
|
<revision>4.3.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.3</name>
|
||||||
|
<created>2013-05-06</created>
|
||||||
|
<revision>4.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.2.1</name>
|
||||||
|
<created>2013-04-03</created>
|
||||||
|
<revision>4.2.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.2</name>
|
||||||
|
<created>2013-03-11</created>
|
||||||
|
<revision>4.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.1</name>
|
||||||
|
<created>2013-01-22</created>
|
||||||
|
<revision>4.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.0</name>
|
||||||
|
<created>2012-10-12</created>
|
||||||
|
<revision>4.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.0-BETA</name>
|
||||||
|
<created>2012-08-13</created>
|
||||||
|
<revision>4.0-BETA</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.0-ALPHA</name>
|
||||||
|
<created>2012-07-03</created>
|
||||||
|
<revision>4.0-ALPHA</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.6.2</name>
|
||||||
|
<created>2012-12-25</created>
|
||||||
|
<revision>3.6.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.6.1</name>
|
||||||
|
<created>2012-07-22</created>
|
||||||
|
<revision>3.6.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.6</name>
|
||||||
|
<created>2012-04-12</created>
|
||||||
|
<revision>3.6</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.5</name>
|
||||||
|
<created>2011-11-11</created>
|
||||||
|
<revision>3.5</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.4</name>
|
||||||
|
<created>2011-09-15</created>
|
||||||
|
<revision>3.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.3</name>
|
||||||
|
<created>2011-07-10</created>
|
||||||
|
<revision>3.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.2</name>
|
||||||
|
<created>2011-06-03</created>
|
||||||
|
<revision>3.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.1</name>
|
||||||
|
<created>2011-03-31</created>
|
||||||
|
<revision>3.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.0.3</name>
|
||||||
|
<created>2010-12-03</created>
|
||||||
|
<revision>3.0.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.0.2</name>
|
||||||
|
<created>2010-06-18</created>
|
||||||
|
<revision>3.0.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.0.1</name>
|
||||||
|
<created>2010-02-26</created>
|
||||||
|
<revision>3.0.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.0</name>
|
||||||
|
<created>2009-11-25</created>
|
||||||
|
<revision>3.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.9.4</name>
|
||||||
|
<created>2010-12-03</created>
|
||||||
|
<revision>2.9.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.9.3</name>
|
||||||
|
<created>2010-06-18</created>
|
||||||
|
<revision>2.9.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.9.2</name>
|
||||||
|
<created>2010-02-26</created>
|
||||||
|
<revision>2.9.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.9.1</name>
|
||||||
|
<created>2009-11-06</created>
|
||||||
|
<revision>2.9.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.9</name>
|
||||||
|
<created>2009-09-25</created>
|
||||||
|
<revision>2.9</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.4.1</name>
|
||||||
|
<created>2009-03-09</created>
|
||||||
|
<revision>2.4.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.4</name>
|
||||||
|
<created>2008-10-08</created>
|
||||||
|
<revision>2.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.3.2</name>
|
||||||
|
<created>2008-05-06</created>
|
||||||
|
<revision>2.3.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.3.1</name>
|
||||||
|
<created>2008-02-22</created>
|
||||||
|
<revision>2.3.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.3</name>
|
||||||
|
<created>2008-01-23</created>
|
||||||
|
<revision>2.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.2</name>
|
||||||
|
<created>2007-06-19</created>
|
||||||
|
<revision>2.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.1</name>
|
||||||
|
<created>2007-02-17</created>
|
||||||
|
<revision>2.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-2.0.0</name>
|
||||||
|
<created>2006-05-26</created>
|
||||||
|
<revision>2.0.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.9.1</name>
|
||||||
|
<created>2006-03-02</created>
|
||||||
|
<revision>1.9.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.9-final</name>
|
||||||
|
<created>2006-02-27</created>
|
||||||
|
<revision>1.9 final</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.9-rc1</name>
|
||||||
|
<created>2006-02-21</created>
|
||||||
|
<revision>1.9 RC1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.4.3</name>
|
||||||
|
<created>2004-12-07</created>
|
||||||
|
<revision>1.4.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.4.2</name>
|
||||||
|
<created>2004-10-01</created>
|
||||||
|
<revision>1.4.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.4.1</name>
|
||||||
|
<created>2004-08-02</created>
|
||||||
|
<revision>1.4.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.4-final</name>
|
||||||
|
<created>2004-07-01</created>
|
||||||
|
<revision>1.4 final</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.4-rc3</name>
|
||||||
|
<created>2004-05-11</created>
|
||||||
|
<revision>1.4 RC3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.4-rc2</name>
|
||||||
|
<created>2004-03-30</created>
|
||||||
|
<revision>1.4 RC2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.4-rc1</name>
|
||||||
|
<created>2004-03-29</created>
|
||||||
|
<revision>1.4 RC1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.3-final</name>
|
||||||
|
<created>2003-12-26</created>
|
||||||
|
<revision>1.3 final</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.3-rc3</name>
|
||||||
|
<created>2003-11-25</created>
|
||||||
|
<revision>1.3 RC3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.3-rc2</name>
|
||||||
|
<created>2003-10-22</created>
|
||||||
|
<revision>1.3 RC2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.3-rc1</name>
|
||||||
|
<created>2003-03-24</created>
|
||||||
|
<revision>1.3 RC1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.2-final</name>
|
||||||
|
<created>2002-06-13</created>
|
||||||
|
<revision>1.2 final</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.2-rc5</name>
|
||||||
|
<created>2002-05-14</created>
|
||||||
|
<revision>1.2 RC5</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.2-rc4</name>
|
||||||
|
<created>2002-02-14</created>
|
||||||
|
<revision>1.2 RC4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.2-rc3</name>
|
||||||
|
<created>2002-01-27</created>
|
||||||
|
<revision>1.2 RC3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.2-rc2</name>
|
||||||
|
<created>2001-10-19</created>
|
||||||
|
<revision>1.2 RC2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.2-rc1</name>
|
||||||
|
<created>2001-10-02</created>
|
||||||
|
<revision>1.2 RC1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.01b</name>
|
||||||
|
<created>2001-06-02</created>
|
||||||
|
<revision>1.01b</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-1.0</name>
|
||||||
|
<created>2000-10-04</created>
|
||||||
|
<revision>1.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-0.04</name>
|
||||||
|
<created>2000-04-19</created>
|
||||||
|
<revision>0.04</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-0.01</name>
|
||||||
|
<created>2000-03-30</created>
|
||||||
|
<revision>0.01</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
</Project>
|
||||||
|
</rdf:RDF>
|
|
@ -0,0 +1,455 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-stylesheet type="text/xsl"?>
|
||||||
|
<rdf:RDF xml:lang="en"
|
||||||
|
xmlns="http://usefulinc.com/ns/doap#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:asfext="http://projects.apache.org/ns/asfext#"
|
||||||
|
xmlns:foaf="http://xmlns.com/foaf/0.1/">
|
||||||
|
<!--
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Copyright (c) 2007 The Apache Software Foundation.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
-->
|
||||||
|
<Project rdf:about="http://lucene.apache.org/solr/">
|
||||||
|
<created>2006-01-17</created>
|
||||||
|
<license rdf:resource="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
|
||||||
|
<name>Apache Solr</name>
|
||||||
|
<homepage rdf:resource="http://lucene.apache.org/solr/" />
|
||||||
|
<asfext:pmc rdf:resource="http://lucene.apache.org" />
|
||||||
|
|
||||||
|
<shortdesc>Solr is a full-text search server</shortdesc>
|
||||||
|
<description>Solr is an open source enterprise search server based on the Lucene Java search library, with XML/HTTP and JSON, Ruby, and Python APIs, hit highlighting, faceted search, caching, replication, and a web administration interface.
|
||||||
|
</description>
|
||||||
|
<bug-database rdf:resource="http://issues.apache.org/jira/browse/SOLR" />
|
||||||
|
<mailing-list rdf:resource="http://lucene.apache.org/solr/discussion.html" />
|
||||||
|
<download-page rdf:resource="http://lucene.apache.org/solr/downloads.html" />
|
||||||
|
<programming-language>Java</programming-language>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The ASF has a finite set of categories projects should use,
|
||||||
|
but the list does grow occasionally, and we should keep an eye
|
||||||
|
on it and adjust which ones we list as appropriate.
|
||||||
|
-->
|
||||||
|
<category rdf:resource="http://projects.apache.org/category/web-framework" />
|
||||||
|
<category rdf:resource="http://projects.apache.org/category/network-server" />
|
||||||
|
<category rdf:resource="http://projects.apache.org/category/search" />
|
||||||
|
|
||||||
|
<wiki rdf:resource="http://wiki.apache.org/solr/"/>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<GitRepository>
|
||||||
|
<location rdf:resource="https://git-wip-us.apache.org/repos/asf/lucene-solr.git"/>
|
||||||
|
</GitRepository>
|
||||||
|
</repository>
|
||||||
|
|
||||||
|
<maintainer>
|
||||||
|
<foaf:Person>
|
||||||
|
<foaf:name>Apache Solr Team</foaf:name>
|
||||||
|
<foaf:mbox rdf:resource="mailto:dev@lucene.apache.org"/>
|
||||||
|
</foaf:Person>
|
||||||
|
</maintainer>
|
||||||
|
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-6.3.0</name>
|
||||||
|
<created>2016-11-08</created>
|
||||||
|
<revision>6.3.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-6.2.1</name>
|
||||||
|
<created>2016-09-20</created>
|
||||||
|
<revision>6.2.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-6.2.0</name>
|
||||||
|
<created>2016-08-25</created>
|
||||||
|
<revision>6.2.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-6.1.0</name>
|
||||||
|
<created>2016-06-17</created>
|
||||||
|
<revision>6.1.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-6.0.1</name>
|
||||||
|
<created>2016-05-28</created>
|
||||||
|
<revision>6.0.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-6.0.0</name>
|
||||||
|
<created>2016-04-08</created>
|
||||||
|
<revision>6.0.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.5.3</name>
|
||||||
|
<created>2016-09-09</created>
|
||||||
|
<revision>5.5.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.5.2</name>
|
||||||
|
<created>2016-06-25</created>
|
||||||
|
<revision>5.5.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.5.1</name>
|
||||||
|
<created>2016-05-05</created>
|
||||||
|
<revision>5.5.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.5.0</name>
|
||||||
|
<created>2016-02-22</created>
|
||||||
|
<revision>5.5.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.4.1</name>
|
||||||
|
<created>2016-01-23</created>
|
||||||
|
<revision>5.4.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.4.0</name>
|
||||||
|
<created>2015-12-14</created>
|
||||||
|
<revision>5.4.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.3.2</name>
|
||||||
|
<created>2016-01-23</created>
|
||||||
|
<revision>5.3.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.3.1</name>
|
||||||
|
<created>2015-09-24</created>
|
||||||
|
<revision>5.3.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.3.0</name>
|
||||||
|
<created>2015-08-21</created>
|
||||||
|
<revision>5.3.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.2.1</name>
|
||||||
|
<created>2015-06-15</created>
|
||||||
|
<revision>5.2.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.2.0</name>
|
||||||
|
<created>2015-06-07</created>
|
||||||
|
<revision>5.2.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.1.0</name>
|
||||||
|
<created>2015-04-14</created>
|
||||||
|
<revision>5.1.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-5.0.0</name>
|
||||||
|
<created>2015-02-20</created>
|
||||||
|
<revision>5.0.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.10.4</name>
|
||||||
|
<created>2015-03-03</created>
|
||||||
|
<revision>4.10.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.10.3</name>
|
||||||
|
<created>2014-12-29</created>
|
||||||
|
<revision>4.10.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.10.2</name>
|
||||||
|
<created>2014-10-31</created>
|
||||||
|
<revision>4.10.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.10.1</name>
|
||||||
|
<created>2014-09-29</created>
|
||||||
|
<revision>4.10.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.10.0</name>
|
||||||
|
<created>2014-09-03</created>
|
||||||
|
<revision>4.10.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.9.1</name>
|
||||||
|
<created>2014-09-22</created>
|
||||||
|
<revision>4.9.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.9.0</name>
|
||||||
|
<created>2014-06-25</created>
|
||||||
|
<revision>4.9.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.8.1</name>
|
||||||
|
<created>2014-05-20</created>
|
||||||
|
<revision>4.8.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.8.0</name>
|
||||||
|
<created>2014-04-28</created>
|
||||||
|
<revision>4.8.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.7.2</name>
|
||||||
|
<created>2014-04-15</created>
|
||||||
|
<revision>4.7.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.7.1</name>
|
||||||
|
<created>2014-02-26</created>
|
||||||
|
<revision>4.7.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.7.0</name>
|
||||||
|
<created>2014-02-26</created>
|
||||||
|
<revision>4.7.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.6.1</name>
|
||||||
|
<created>2014-01-28</created>
|
||||||
|
<revision>4.6.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.6.0</name>
|
||||||
|
<created>2013-11-22</created>
|
||||||
|
<revision>4.6.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.5.1</name>
|
||||||
|
<created>2013-10-24</created>
|
||||||
|
<revision>4.5.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.5</name>
|
||||||
|
<created>2013-10-05</created>
|
||||||
|
<revision>4.5</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.4</name>
|
||||||
|
<created>2013-07-23</created>
|
||||||
|
<revision>4.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.3.1</name>
|
||||||
|
<created>2013-06-18</created>
|
||||||
|
<revision>4.3.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.3</name>
|
||||||
|
<created>2013-05-06</created>
|
||||||
|
<revision>4.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.2.1</name>
|
||||||
|
<created>2013-04-03</created>
|
||||||
|
<revision>4.2.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.2</name>
|
||||||
|
<created>2013-03-11</created>
|
||||||
|
<revision>4.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.1</name>
|
||||||
|
<created>2013-01-22</created>
|
||||||
|
<revision>4.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-4.0</name>
|
||||||
|
<created>2012-10-12</created>
|
||||||
|
<revision>4.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.0-BETA</name>
|
||||||
|
<created>2012-08-13</created>
|
||||||
|
<revision>4.0-BETA</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-4.0-ALPHA</name>
|
||||||
|
<created>2012-07-03</created>
|
||||||
|
<revision>4.0-ALPHA</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.6.2</name>
|
||||||
|
<created>2012-12-25</created>
|
||||||
|
<revision>3.6.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>lucene-3.6.1</name>
|
||||||
|
<created>2012-07-22</created>
|
||||||
|
<revision>3.6.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-3.6</name>
|
||||||
|
<created>2012-04-12</created>
|
||||||
|
<revision>3.6</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-3.5</name>
|
||||||
|
<created>2011-11-11</created>
|
||||||
|
<revision>3.5</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-3.4</name>
|
||||||
|
<created>2011-09-15</created>
|
||||||
|
<revision>3.4</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-3.3</name>
|
||||||
|
<created>2011-07-10</created>
|
||||||
|
<revision>3.3</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-3.2</name>
|
||||||
|
<created>2011-06-03</created>
|
||||||
|
<revision>3.2</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-3.1</name>
|
||||||
|
<created>2011-03-31</created>
|
||||||
|
<revision>3.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-1.4.1</name>
|
||||||
|
<created>2010-6-25</created>
|
||||||
|
<revision>1.4.1</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-1.4.0</name>
|
||||||
|
<created>2009-11-10</created>
|
||||||
|
<revision>1.4.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-1.3.0</name>
|
||||||
|
<created>2008-09-16</created>
|
||||||
|
<revision>1.3.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-1.2.0</name>
|
||||||
|
<created>2007-06-06</created>
|
||||||
|
<revision>1.2.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>solr-1.1.0</name>
|
||||||
|
<created>2006-12-22</created>
|
||||||
|
<revision>1.1.0</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
</Project>
|
||||||
|
</rdf:RDF>
|
|
@ -65,6 +65,8 @@ New features
|
||||||
|
|
||||||
* LUCENE-5867: Added BooleanSimilarity. (Robert Muir, Adrien Grand)
|
* LUCENE-5867: Added BooleanSimilarity. (Robert Muir, Adrien Grand)
|
||||||
|
|
||||||
|
* LUCENE-7466: Added AxiomaticSimilarity. (Peilin Yang via Tommaso Teofili)
|
||||||
|
|
||||||
Bug Fixes
|
Bug Fixes
|
||||||
|
|
||||||
* LUCENE-7547: JapaneseTokenizerFactory was failing to close the
|
* LUCENE-7547: JapaneseTokenizerFactory was failing to close the
|
||||||
|
@ -129,6 +131,10 @@ Build
|
||||||
|
|
||||||
* LUCENE-7387: fix defaultCodec in build.xml to account for the line ending (hossman)
|
* LUCENE-7387: fix defaultCodec in build.xml to account for the line ending (hossman)
|
||||||
|
|
||||||
|
* LUCENE-7543: Make changes-to-html target an offline operation, by moving the
|
||||||
|
Lucene and Solr DOAP RDF files into the Git source repository under
|
||||||
|
dev-tools/doap/ and then pulling release dates from those files, rather than
|
||||||
|
from JIRA. (Mano Kovacs, hossman, Steve Rowe)
|
||||||
|
|
||||||
======================= Lucene 6.3.0 =======================
|
======================= Lucene 6.3.0 =======================
|
||||||
|
|
||||||
|
|
|
@ -357,13 +357,14 @@
|
||||||
|
|
||||||
<build-changes changes.src.file="${local.src.export.dir}/CHANGES.txt"
|
<build-changes changes.src.file="${local.src.export.dir}/CHANGES.txt"
|
||||||
changes.target.dir="${local.src.export.dir}/docs/changes"
|
changes.target.dir="${local.src.export.dir}/docs/changes"
|
||||||
changes.product="LUCENE"/>
|
changes.product="lucene"/>
|
||||||
<tar tarfile="${source.package.file}" compression="gzip" longfile="gnu">
|
<tar tarfile="${source.package.file}" compression="gzip" longfile="gnu">
|
||||||
<tarfileset prefix="lucene-${version}" dir="${local.src.export.dir}"/>
|
<tarfileset prefix="lucene-${version}" dir="${local.src.export.dir}"/>
|
||||||
</tar>
|
</tar>
|
||||||
<make-checksums file="${source.package.file}"/>
|
<make-checksums file="${source.package.file}"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
|
||||||
<!-- ================================================================== -->
|
<!-- ================================================================== -->
|
||||||
<!-- Packages the sources from local working copy with tar-gzip -->
|
<!-- Packages the sources from local working copy with tar-gzip -->
|
||||||
<!-- ================================================================== -->
|
<!-- ================================================================== -->
|
||||||
|
@ -478,7 +479,7 @@
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="changes-to-html">
|
<target name="changes-to-html">
|
||||||
<build-changes changes.product="LUCENE"/>
|
<build-changes changes.product="lucene"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="pitest-modules" depends="compile-test">
|
<target name="pitest-modules" depends="compile-test">
|
||||||
|
|
|
@ -2504,18 +2504,17 @@ ${ant.project.name}.test.dependencies=${test.classpath.list}
|
||||||
<macrodef name="build-changes">
|
<macrodef name="build-changes">
|
||||||
<attribute name="changes.product"/>
|
<attribute name="changes.product"/>
|
||||||
<attribute name="changes.src.file" default="CHANGES.txt"/>
|
<attribute name="changes.src.file" default="CHANGES.txt"/>
|
||||||
|
<attribute name="changes.src.doap" default="${dev-tools.dir}/doap/@{changes.product}.rdf"/>
|
||||||
<attribute name="changes.target.dir" default="${changes.target.dir}"/>
|
<attribute name="changes.target.dir" default="${changes.target.dir}"/>
|
||||||
<attribute name="lucene.javadoc.url" default="${lucene.javadoc.url}"/>
|
<attribute name="lucene.javadoc.url" default="${lucene.javadoc.url}"/>
|
||||||
<sequential>
|
<sequential>
|
||||||
<mkdir dir="@{changes.target.dir}"/>
|
<mkdir dir="@{changes.target.dir}"/>
|
||||||
<get src="https://issues.apache.org/jira/rest/api/2/project/@{changes.product}"
|
|
||||||
dest="@{changes.target.dir}/jiraVersionList.json" httpusecaches="false"/>
|
|
||||||
<exec executable="${perl.exe}" input="@{changes.src.file}" output="@{changes.target.dir}/Changes.html"
|
<exec executable="${perl.exe}" input="@{changes.src.file}" output="@{changes.target.dir}/Changes.html"
|
||||||
failonerror="true" logError="true">
|
failonerror="true" logError="true">
|
||||||
<arg value="-CSD"/>
|
<arg value="-CSD"/>
|
||||||
<arg value="${changes.src.dir}/changes2html.pl"/>
|
<arg value="${changes.src.dir}/changes2html.pl"/>
|
||||||
<arg value="@{changes.product}"/>
|
<arg value="@{changes.product}"/>
|
||||||
<arg value="@{changes.target.dir}/jiraVersionList.json"/>
|
<arg value="@{changes.src.doap}"/>
|
||||||
<arg value="@{lucene.javadoc.url}"/>
|
<arg value="@{lucene.javadoc.url}"/>
|
||||||
</exec>
|
</exec>
|
||||||
<delete file="@{changes.target.dir}/jiraVersionList.json"/>
|
<delete file="@{changes.target.dir}/jiraVersionList.json"/>
|
||||||
|
|
|
@ -109,7 +109,10 @@ public class BooleanQuery extends Query implements Iterable<BooleanClause> {
|
||||||
* @throws TooManyClauses if the new number of clauses exceeds the maximum clause number
|
* @throws TooManyClauses if the new number of clauses exceeds the maximum clause number
|
||||||
*/
|
*/
|
||||||
public Builder add(BooleanClause clause) {
|
public Builder add(BooleanClause clause) {
|
||||||
add(clause.getQuery(), clause.getOccur());
|
if (clauses.size() >= maxClauseCount) {
|
||||||
|
throw new TooManyClauses();
|
||||||
|
}
|
||||||
|
clauses.add(clause);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,11 +123,7 @@ public class BooleanQuery extends Query implements Iterable<BooleanClause> {
|
||||||
* @throws TooManyClauses if the new number of clauses exceeds the maximum clause number
|
* @throws TooManyClauses if the new number of clauses exceeds the maximum clause number
|
||||||
*/
|
*/
|
||||||
public Builder add(Query query, Occur occur) {
|
public Builder add(Query query, Occur occur) {
|
||||||
if (clauses.size() >= maxClauseCount) {
|
return add(new BooleanClause(query, occur));
|
||||||
throw new TooManyClauses();
|
|
||||||
}
|
|
||||||
clauses.add(new BooleanClause(query, occur));
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create a new {@link BooleanQuery} based on the parameters that have
|
/** Create a new {@link BooleanQuery} based on the parameters that have
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.lucene.search.Explanation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Axiomatic approaches for IR. From Hui Fang and Chengxiang Zhai
|
||||||
|
* 2005. An Exploration of Axiomatic Approaches to Information Retrieval.
|
||||||
|
* In Proceedings of the 28th annual international ACM SIGIR
|
||||||
|
* conference on Research and development in information retrieval
|
||||||
|
* (SIGIR '05). ACM, New York, NY, USA, 480-487.
|
||||||
|
* <p>
|
||||||
|
* There are a family of models. All of them are based on BM25,
|
||||||
|
* Pivoted Document Length Normalization and Language model with
|
||||||
|
* Dirichlet prior. Some components (e.g. Term Frequency,
|
||||||
|
* Inverted Document Frequency) in the original models are modified
|
||||||
|
* so that they follow some axiomatic constraints.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @lucene.experimental
|
||||||
|
*/
|
||||||
|
public abstract class Axiomatic extends SimilarityBase {
|
||||||
|
/**
|
||||||
|
* hyperparam for the growth function
|
||||||
|
*/
|
||||||
|
protected final float s;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hyperparam for the primitive weighthing function
|
||||||
|
*/
|
||||||
|
protected final float k;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the query length
|
||||||
|
*/
|
||||||
|
protected final int queryLen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting all Axiomatic hyperparameters
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
* @param queryLen the query length
|
||||||
|
* @param k hyperparam for the primitive weighting function
|
||||||
|
*/
|
||||||
|
public Axiomatic(float s, int queryLen, float k) {
|
||||||
|
if (Float.isFinite(s) == false || Float.isNaN(s) || s < 0 || s > 1) {
|
||||||
|
throw new IllegalArgumentException("illegal s value: " + s + ", must be between 0 and 1");
|
||||||
|
}
|
||||||
|
if (Float.isFinite(k) == false || Float.isNaN(k) || k < 0 || k > 1) {
|
||||||
|
throw new IllegalArgumentException("illegal k value: " + k + ", must be between 0 and 1");
|
||||||
|
}
|
||||||
|
if (queryLen < 0 || queryLen > Integer.MAX_VALUE) {
|
||||||
|
throw new IllegalArgumentException("illegal query length value: "
|
||||||
|
+ queryLen + ", must be larger 0 and smaller than MAX_INT");
|
||||||
|
}
|
||||||
|
this.s = s;
|
||||||
|
this.queryLen = queryLen;
|
||||||
|
this.k = k;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting only s, letting k and queryLen to default
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
*/
|
||||||
|
public Axiomatic(float s) {
|
||||||
|
this(s, 1, 0.35f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting s and queryLen, letting k to default
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
* @param queryLen the query length
|
||||||
|
*/
|
||||||
|
public Axiomatic(float s, int queryLen) {
|
||||||
|
this(s, queryLen, 0.35f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor
|
||||||
|
*/
|
||||||
|
public Axiomatic() {
|
||||||
|
this(0.25f, 1, 0.35f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float score(BasicStats stats, float freq, float docLen) {
|
||||||
|
return tf(stats, freq, docLen)
|
||||||
|
* ln(stats, freq, docLen)
|
||||||
|
* tfln(stats, freq, docLen)
|
||||||
|
* idf(stats, freq, docLen)
|
||||||
|
- gamma(stats, freq, docLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void explain(List<Explanation> subs, BasicStats stats, int doc,
|
||||||
|
float freq, float docLen) {
|
||||||
|
if (stats.getBoost() != 1.0f) {
|
||||||
|
subs.add(Explanation.match(stats.getBoost(), "boost"));
|
||||||
|
}
|
||||||
|
|
||||||
|
subs.add(Explanation.match(this.k, "k"));
|
||||||
|
subs.add(Explanation.match(this.s, "s"));
|
||||||
|
subs.add(Explanation.match(this.queryLen, "queryLen"));
|
||||||
|
subs.add(Explanation.match(tf(stats, freq, docLen), "tf"));
|
||||||
|
subs.add(Explanation.match(ln(stats, freq, docLen), "ln"));
|
||||||
|
subs.add(Explanation.match(tfln(stats, freq, docLen), "tfln"));
|
||||||
|
subs.add(Explanation.match(idf(stats, freq, docLen), "idf"));
|
||||||
|
subs.add(Explanation.match(gamma(stats, freq, docLen), "gamma"));
|
||||||
|
super.explain(subs, stats, doc, freq, docLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Name of the axiomatic method.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public abstract String toString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the term frequency component
|
||||||
|
*/
|
||||||
|
protected abstract float tf(BasicStats stats, float freq, float docLen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the document length component
|
||||||
|
*/
|
||||||
|
protected abstract float ln(BasicStats stats, float freq, float docLen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the mixed term frequency and document length component
|
||||||
|
*/
|
||||||
|
protected abstract float tfln(BasicStats stats, float freq, float docLen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the inverted document frequency component
|
||||||
|
*/
|
||||||
|
protected abstract float idf(BasicStats stats, float freq, float docLen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the gamma component (only for F3EXp and F3LOG)
|
||||||
|
*/
|
||||||
|
protected abstract float gamma(BasicStats stats, float freq, float docLen);
|
||||||
|
}
|
|
@ -0,0 +1,95 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* F1EXP is defined as Sum(tf(term_doc_freq)*ln(docLen)*IDF(term))
|
||||||
|
* where IDF(t) = pow((N+1)/df(t), k) N=total num of docs, df=doc freq
|
||||||
|
*
|
||||||
|
* @lucene.experimental
|
||||||
|
*/
|
||||||
|
public class AxiomaticF1EXP extends Axiomatic {
|
||||||
|
/**
|
||||||
|
* Constructor setting s and k, letting queryLen to default
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
* @param k hyperparam for the primitive weighting function
|
||||||
|
*/
|
||||||
|
public AxiomaticF1EXP(float s, float k) {
|
||||||
|
super(s, 1, k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting s only, letting k and queryLen to default
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
*/
|
||||||
|
public AxiomaticF1EXP(float s) {
|
||||||
|
this(s, 0.35f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor
|
||||||
|
*/
|
||||||
|
public AxiomaticF1EXP() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "F1EXP";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the term frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tf(BasicStats stats, float freq, float docLen) {
|
||||||
|
if (freq <= 0.0) return 0f;
|
||||||
|
return (float) (1 + Math.log(1 + Math.log(freq)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float ln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (stats.getAvgFieldLength() + this.s) / (stats.getAvgFieldLength() + docLen * this.s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the mixed term frequency and document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tfln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the inverted document frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float idf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (float) Math.pow((stats.getNumberOfDocuments() + 1.0) / stats.getDocFreq(), this.k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the gamma component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float gamma(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* F1LOG is defined as Sum(tf(term_doc_freq)*ln(docLen)*IDF(term))
|
||||||
|
* where IDF(t) = ln((N+1)/df(t)) N=total num of docs, df=doc freq
|
||||||
|
*
|
||||||
|
* @lucene.experimental
|
||||||
|
*/
|
||||||
|
public class AxiomaticF1LOG extends Axiomatic {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting s only, letting k and queryLen to default
|
||||||
|
*
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
*/
|
||||||
|
public AxiomaticF1LOG(float s) {
|
||||||
|
super(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor
|
||||||
|
*/
|
||||||
|
public AxiomaticF1LOG() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "F1LOG";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the term frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tf(BasicStats stats, float freq, float docLen) {
|
||||||
|
if (freq <= 0.0) return 0f;
|
||||||
|
return (float) (1 + Math.log(1 + Math.log(freq)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float ln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (stats.getAvgFieldLength() + this.s) / (stats.getAvgFieldLength() + docLen * this.s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the mixed term frequency and document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tfln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the inverted document frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float idf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (float) Math.log((stats.getNumberOfDocuments() + 1.0) / stats.getDocFreq());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the gamma component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float gamma(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* F2EXP is defined as Sum(tfln(term_doc_freq, docLen)*IDF(term))
|
||||||
|
* where IDF(t) = pow((N+1)/df(t), k) N=total num of docs, df=doc freq
|
||||||
|
*
|
||||||
|
* @lucene.experimental
|
||||||
|
*/
|
||||||
|
public class AxiomaticF2EXP extends Axiomatic {
|
||||||
|
/**
|
||||||
|
* Constructor setting s and k, letting queryLen to default
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
* @param k hyperparam for the primitive weighting function
|
||||||
|
*/
|
||||||
|
public AxiomaticF2EXP(float s, float k) {
|
||||||
|
super(s, 1, k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting s only, letting k and queryLen to default
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
*/
|
||||||
|
public AxiomaticF2EXP(float s) {
|
||||||
|
this(s, 0.35f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor
|
||||||
|
*/
|
||||||
|
public AxiomaticF2EXP() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "F2EXP";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the term frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float ln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the mixed term frequency and document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tfln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return freq / (freq + this.s + this.s * docLen / stats.getAvgFieldLength());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the inverted document frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float idf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (float) Math.pow((stats.getNumberOfDocuments() + 1.0) / stats.getDocFreq(), this.k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the gamma component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float gamma(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* F2EXP is defined as Sum(tfln(term_doc_freq, docLen)*IDF(term))
|
||||||
|
* where IDF(t) = ln((N+1)/df(t)) N=total num of docs, df=doc freq
|
||||||
|
*
|
||||||
|
* @lucene.experimental
|
||||||
|
*/
|
||||||
|
public class AxiomaticF2LOG extends Axiomatic {
|
||||||
|
/**
|
||||||
|
* Constructor setting s only, letting k and queryLen to default
|
||||||
|
*
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
*/
|
||||||
|
public AxiomaticF2LOG(float s) {
|
||||||
|
super(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor
|
||||||
|
*/
|
||||||
|
public AxiomaticF2LOG() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "F2LOG";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the term frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float ln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the mixed term frequency and document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tfln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return freq / (freq + this.s + this.s * docLen / stats.getAvgFieldLength());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the inverted document frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float idf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (float) Math.log((stats.getNumberOfDocuments() + 1.0) / stats.getDocFreq());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the gamma component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float gamma(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* F2EXP is defined as Sum(tf(term_doc_freq)*IDF(term)-gamma(docLen, queryLen))
|
||||||
|
* where IDF(t) = pow((N+1)/df(t), k) N=total num of docs, df=doc freq
|
||||||
|
* gamma(docLen, queryLen) = (docLen-queryLen)*queryLen*s/avdl
|
||||||
|
*
|
||||||
|
* @lucene.experimental
|
||||||
|
*/
|
||||||
|
public class AxiomaticF3EXP extends Axiomatic {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting all Axiomatic hyperparameters
|
||||||
|
*
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
* @param queryLen the query length
|
||||||
|
* @param k hyperparam for the primitive weighting function
|
||||||
|
*/
|
||||||
|
public AxiomaticF3EXP(float s, int queryLen, float k) {
|
||||||
|
super(s, queryLen, k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting s and queryLen, letting k to default
|
||||||
|
*
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
* @param queryLen the query length
|
||||||
|
*/
|
||||||
|
public AxiomaticF3EXP(float s, int queryLen) {
|
||||||
|
this(s, queryLen, 0.35f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "F3EXP";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the term frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tf(BasicStats stats, float freq, float docLen) {
|
||||||
|
if (freq <= 0.0) return 0f;
|
||||||
|
return (float) (1 + Math.log(1 + Math.log(freq)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float ln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the mixed term frequency and document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tfln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the inverted document frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float idf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (float) Math.pow((stats.getNumberOfDocuments() + 1.0) / stats.getDocFreq(), this.k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the gamma component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float gamma(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (docLen - this.queryLen) * this.s * this.queryLen / stats.getAvgFieldLength();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* F2EXP is defined as Sum(tf(term_doc_freq)*IDF(term)-gamma(docLen, queryLen))
|
||||||
|
* where IDF(t) = ln((N+1)/df(t)) N=total num of docs, df=doc freq
|
||||||
|
* gamma(docLen, queryLen) = (docLen-queryLen)*queryLen*s/avdl
|
||||||
|
*
|
||||||
|
* @lucene.experimental
|
||||||
|
*/
|
||||||
|
public class AxiomaticF3LOG extends Axiomatic {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting s and queryLen, letting k to default
|
||||||
|
*
|
||||||
|
* @param s hyperparam for the growth function
|
||||||
|
* @param queryLen the query length
|
||||||
|
*/
|
||||||
|
public AxiomaticF3LOG(float s, int queryLen) {
|
||||||
|
super(s, queryLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "F3LOG";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the term frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tf(BasicStats stats, float freq, float docLen) {
|
||||||
|
if (freq <= 0.0) return 0f;
|
||||||
|
return (float) (1 + Math.log(1 + Math.log(freq)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float ln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the mixed term frequency and document length component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float tfln(BasicStats stats, float freq, float docLen) {
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the inverted document frequency component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float idf(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (float) Math.log((stats.getNumberOfDocuments() + 1.0) / stats.getDocFreq());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* compute the gamma component
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected float gamma(BasicStats stats, float freq, float docLen) {
|
||||||
|
return (docLen - this.queryLen) * this.s * this.queryLen / stats.getAvgFieldLength();
|
||||||
|
}
|
||||||
|
}
|
|
@ -51,8 +51,8 @@ import org.apache.lucene.search.TermQuery;
|
||||||
* are provided so that the generated queries can be customized.
|
* are provided so that the generated queries can be customized.
|
||||||
*/
|
*/
|
||||||
public class QueryBuilder {
|
public class QueryBuilder {
|
||||||
private Analyzer analyzer;
|
protected Analyzer analyzer;
|
||||||
private boolean enablePositionIncrements = true;
|
protected boolean enablePositionIncrements = true;
|
||||||
|
|
||||||
/** Creates a new QueryBuilder using the given analyzer. */
|
/** Creates a new QueryBuilder using the given analyzer. */
|
||||||
public QueryBuilder(Analyzer analyzer) {
|
public QueryBuilder(Analyzer analyzer) {
|
||||||
|
@ -188,7 +188,10 @@ public class QueryBuilder {
|
||||||
* <p>
|
* <p>
|
||||||
* Expert: this is more useful for subclasses such as queryparsers.
|
* Expert: this is more useful for subclasses such as queryparsers.
|
||||||
* If using this class directly, just use {@link #createBooleanQuery(String, String)}
|
* If using this class directly, just use {@link #createBooleanQuery(String, String)}
|
||||||
* and {@link #createPhraseQuery(String, String)}
|
* and {@link #createPhraseQuery(String, String)}. This is a complex method and
|
||||||
|
* it is usually not necessary to override it in a subclass; instead, override
|
||||||
|
* methods like {@link #newBooleanQuery}, etc., if possible.
|
||||||
|
*
|
||||||
* @param analyzer analyzer used for this query
|
* @param analyzer analyzer used for this query
|
||||||
* @param operator default boolean operator used for this query
|
* @param operator default boolean operator used for this query
|
||||||
* @param field field to create queries against
|
* @param field field to create queries against
|
||||||
|
@ -265,7 +268,7 @@ public class QueryBuilder {
|
||||||
/**
|
/**
|
||||||
* Creates simple term query from the cached tokenstream contents
|
* Creates simple term query from the cached tokenstream contents
|
||||||
*/
|
*/
|
||||||
private Query analyzeTerm(String field, TokenStream stream) throws IOException {
|
protected Query analyzeTerm(String field, TokenStream stream) throws IOException {
|
||||||
TermToBytesRefAttribute termAtt = stream.getAttribute(TermToBytesRefAttribute.class);
|
TermToBytesRefAttribute termAtt = stream.getAttribute(TermToBytesRefAttribute.class);
|
||||||
|
|
||||||
stream.reset();
|
stream.reset();
|
||||||
|
@ -279,7 +282,7 @@ public class QueryBuilder {
|
||||||
/**
|
/**
|
||||||
* Creates simple boolean query from the cached tokenstream contents
|
* Creates simple boolean query from the cached tokenstream contents
|
||||||
*/
|
*/
|
||||||
private Query analyzeBoolean(String field, TokenStream stream) throws IOException {
|
protected Query analyzeBoolean(String field, TokenStream stream) throws IOException {
|
||||||
TermToBytesRefAttribute termAtt = stream.getAttribute(TermToBytesRefAttribute.class);
|
TermToBytesRefAttribute termAtt = stream.getAttribute(TermToBytesRefAttribute.class);
|
||||||
|
|
||||||
stream.reset();
|
stream.reset();
|
||||||
|
@ -291,7 +294,7 @@ public class QueryBuilder {
|
||||||
return newSynonymQuery(terms.toArray(new Term[terms.size()]));
|
return newSynonymQuery(terms.toArray(new Term[terms.size()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void add(BooleanQuery.Builder q, List<Term> current, BooleanClause.Occur operator) {
|
protected void add(BooleanQuery.Builder q, List<Term> current, BooleanClause.Occur operator) {
|
||||||
if (current.isEmpty()) {
|
if (current.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -305,7 +308,7 @@ public class QueryBuilder {
|
||||||
/**
|
/**
|
||||||
* Creates complex boolean query from the cached tokenstream contents
|
* Creates complex boolean query from the cached tokenstream contents
|
||||||
*/
|
*/
|
||||||
private Query analyzeMultiBoolean(String field, TokenStream stream, BooleanClause.Occur operator) throws IOException {
|
protected Query analyzeMultiBoolean(String field, TokenStream stream, BooleanClause.Occur operator) throws IOException {
|
||||||
BooleanQuery.Builder q = newBooleanQuery();
|
BooleanQuery.Builder q = newBooleanQuery();
|
||||||
List<Term> currentQuery = new ArrayList<>();
|
List<Term> currentQuery = new ArrayList<>();
|
||||||
|
|
||||||
|
@ -328,7 +331,7 @@ public class QueryBuilder {
|
||||||
/**
|
/**
|
||||||
* Creates simple phrase query from the cached tokenstream contents
|
* Creates simple phrase query from the cached tokenstream contents
|
||||||
*/
|
*/
|
||||||
private Query analyzePhrase(String field, TokenStream stream, int slop) throws IOException {
|
protected Query analyzePhrase(String field, TokenStream stream, int slop) throws IOException {
|
||||||
PhraseQuery.Builder builder = new PhraseQuery.Builder();
|
PhraseQuery.Builder builder = new PhraseQuery.Builder();
|
||||||
builder.setSlop(slop);
|
builder.setSlop(slop);
|
||||||
|
|
||||||
|
@ -352,7 +355,7 @@ public class QueryBuilder {
|
||||||
/**
|
/**
|
||||||
* Creates complex phrase query from the cached tokenstream contents
|
* Creates complex phrase query from the cached tokenstream contents
|
||||||
*/
|
*/
|
||||||
private Query analyzeMultiPhrase(String field, TokenStream stream, int slop) throws IOException {
|
protected Query analyzeMultiPhrase(String field, TokenStream stream, int slop) throws IOException {
|
||||||
MultiPhraseQuery.Builder mpqb = newMultiPhraseQueryBuilder();
|
MultiPhraseQuery.Builder mpqb = newMultiPhraseQueryBuilder();
|
||||||
mpqb.setSlop(slop);
|
mpqb.setSlop(slop);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.lucene.search.similarities;
|
||||||
|
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
|
public class TestAxiomaticSimilarity extends LuceneTestCase {
|
||||||
|
|
||||||
|
public void testSaneNormValues() {
|
||||||
|
Axiomatic sim = new AxiomaticF2EXP();
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
float len = sim.decodeNormValue((byte) i);
|
||||||
|
assertFalse("negative len: " + len + ", byte=" + i, len < 0.0f);
|
||||||
|
assertFalse("inf len: " + len + ", byte=" + i, Float.isInfinite(len));
|
||||||
|
assertFalse("nan len for byte=" + i, Float.isNaN(len));
|
||||||
|
if (i > 0) {
|
||||||
|
assertTrue("len is not decreasing: " + len + ",byte=" + i, len < sim.decodeNormValue((byte) (i - 1)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testIllegalS() {
|
||||||
|
IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(Float.POSITIVE_INFINITY, 0.1f);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal s value"));
|
||||||
|
|
||||||
|
expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(-1, 0.1f);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal s value"));
|
||||||
|
|
||||||
|
expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(Float.NaN, 0.1f);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal s value"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testIllegalK() {
|
||||||
|
IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(0.35f, 2f);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal k value"));
|
||||||
|
|
||||||
|
expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(0.35f, -1f);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal k value"));
|
||||||
|
|
||||||
|
expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(0.35f, Float.POSITIVE_INFINITY);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal k value"));
|
||||||
|
|
||||||
|
expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(0.35f, Float.NaN);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal k value"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testIllegalQL() {
|
||||||
|
IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF3EXP(0.35f, -1);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal query length value"));
|
||||||
|
|
||||||
|
expected = expectThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new AxiomaticF2EXP(0.35f, Integer.MAX_VALUE + 1);
|
||||||
|
});
|
||||||
|
assertTrue(expected.getMessage().contains("illegal k value"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,9 +23,8 @@
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use XML::Simple;
|
||||||
|
|
||||||
# JIRA REST API documentation: <http://docs.atlassian.com/jira/REST/latest/>
|
|
||||||
my $project_info_url = 'https://issues.apache.org/jira/rest/api/2/project';
|
|
||||||
my $jira_url_prefix = 'http://issues.apache.org/jira/browse/';
|
my $jira_url_prefix = 'http://issues.apache.org/jira/browse/';
|
||||||
my $github_pull_request_prefix = 'https://github.com/apache/lucene-solr/pull/';
|
my $github_pull_request_prefix = 'https://github.com/apache/lucene-solr/pull/';
|
||||||
my $bugzilla_url_prefix = 'http://issues.apache.org/bugzilla/show_bug.cgi?id=';
|
my $bugzilla_url_prefix = 'http://issues.apache.org/bugzilla/show_bug.cgi?id=';
|
||||||
|
@ -45,7 +44,7 @@ my @releases = ();
|
||||||
my @lines = <STDIN>; # Get all input at once
|
my @lines = <STDIN>; # Get all input at once
|
||||||
|
|
||||||
#
|
#
|
||||||
# Cmdline args: <LUCENE|SOLR> <JIRA-release-dates-json> <lucene-javadoc-url>(only from Solr)
|
# Cmdline args: <LUCENE|SOLR> <project-DOAP-rdf-file> <lucene-javadoc-url>(only from Solr)
|
||||||
#
|
#
|
||||||
my $product = $ARGV[0];
|
my $product = $ARGV[0];
|
||||||
my %release_dates = &setup_release_dates($ARGV[1]);
|
my %release_dates = &setup_release_dates($ARGV[1]);
|
||||||
|
@ -804,10 +803,6 @@ sub get_release_date {
|
||||||
# Handle '1.2 RC6', which should be '1.2 final'
|
# Handle '1.2 RC6', which should be '1.2 final'
|
||||||
$release = '1.2 final' if ($release eq '1.2 RC6');
|
$release = '1.2 final' if ($release eq '1.2 RC6');
|
||||||
|
|
||||||
if (not exists($release_dates{$release})) {
|
|
||||||
$release =~ s/\.0\.0/\.0/;
|
|
||||||
}
|
|
||||||
|
|
||||||
$reldate = ( exists($release_dates{$release})
|
$reldate = ( exists($release_dates{$release})
|
||||||
? $release_dates{$release}
|
? $release_dates{$release}
|
||||||
: 'unknown');
|
: 'unknown');
|
||||||
|
@ -825,60 +820,46 @@ sub get_release_date {
|
||||||
# Returns a list of alternating release names and dates, for use in populating
|
# Returns a list of alternating release names and dates, for use in populating
|
||||||
# the %release_dates hash.
|
# the %release_dates hash.
|
||||||
#
|
#
|
||||||
# Pulls release dates via the JIRA REST API. JIRA does not list
|
# Pulls release dates from the project DOAP file.
|
||||||
# X.Y RCZ releases independently from releases X.Y, so the RC dates
|
|
||||||
# as well as those named "final" are included below.
|
|
||||||
#
|
#
|
||||||
sub setup_release_dates {
|
sub setup_release_dates {
|
||||||
my %release_dates;
|
my %release_dates;
|
||||||
my $file = shift;
|
my $file = shift;
|
||||||
if (uc($product) eq 'LUCENE') {
|
|
||||||
%release_dates
|
|
||||||
= ( '0.01' => '2000-03-30', '0.04' => '2000-04-19',
|
|
||||||
'1.0' => '2000-10-04', '1.01b' => '2001-06-02',
|
|
||||||
'1.2 RC1' => '2001-10-02', '1.2 RC2' => '2001-10-19',
|
|
||||||
'1.2 RC3' => '2002-01-27', '1.2 RC4' => '2002-02-14',
|
|
||||||
'1.2 RC5' => '2002-05-14', '1.2 final' => '2002-06-13',
|
|
||||||
'1.3 RC1' => '2003-03-24', '1.3 RC2' => '2003-10-22',
|
|
||||||
'1.3 RC3' => '2003-11-25', '1.3 final' => '2003-12-26',
|
|
||||||
'1.4 RC1' => '2004-03-29', '1.4 RC2' => '2004-03-30',
|
|
||||||
'1.4 RC3' => '2004-05-11', '1.4 final' => '2004-07-01',
|
|
||||||
'1.4.1' => '2004-08-02', '1.4.2' => '2004-10-01',
|
|
||||||
'1.4.3' => '2004-12-07', '1.9 RC1' => '2006-02-21',
|
|
||||||
'1.9 final' => '2006-02-27', '1.9.1' => '2006-03-02',
|
|
||||||
'2.0.0' => '2006-05-26', '2.1.0' => '2007-02-14',
|
|
||||||
'2.2.0' => '2007-06-19', '2.3.0' => '2008-01-21',
|
|
||||||
'2.3.1' => '2008-02-22', '2.3.2' => '2008-05-05',
|
|
||||||
'2.4.0' => '2008-10-06', '2.4.1' => '2009-03-09',
|
|
||||||
'2.9.0' => '2009-09-23', '2.9.1' => '2009-11-06',
|
|
||||||
'3.0.0' => '2009-11-25');
|
|
||||||
}
|
|
||||||
|
|
||||||
my $project_info_json = readFile($file);
|
my $project_info = XMLin($file)->{Project};
|
||||||
my $project_info = json2perl($project_info_json);
|
my $version;
|
||||||
for my $version (@{$project_info->{versions}}) {
|
my $date;
|
||||||
if ($version->{releaseDate}) {
|
for my $release (@{$project_info->{release}}) {
|
||||||
my $date = substr($version->{releaseDate}, 0, 10);
|
$version = $release->{Version};
|
||||||
my $version_name = $version->{name};
|
if ($version->{created}) {
|
||||||
$release_dates{$version->{name}} = $date;
|
$date = normalize_date($version->{created});
|
||||||
if ($version_name =~ /^\d+\.\d+$/) {
|
my $version_name = $version->{revision};
|
||||||
my $full_version_name = "$version->{name}.0";
|
$release_dates{$version->{revision}} = $date;
|
||||||
$release_dates{$full_version_name} = $date;
|
if ($version_name =~ /^([1-9]\d*\.\d+)([^.0-9].*|$)/) {
|
||||||
|
my $padded_version_name = "$1.0$2"; # Alias w/trailing ".0"
|
||||||
|
$release_dates{$padded_version_name} = $date;
|
||||||
|
} elsif ($version_name =~ /\.0(?=[^.0-9]|$)/) {
|
||||||
|
my $trimmed_version_name = $version_name;
|
||||||
|
$trimmed_version_name =~ s/\.0(?=[^.0-9]|$)//; # Alias w/o trailing ".0"
|
||||||
|
$release_dates{$trimmed_version_name} = $date;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return %release_dates;
|
return %release_dates;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub readFile {
|
#
|
||||||
my $file = shift;
|
# normalize_date
|
||||||
open(F, '<'.$file) || die "could not open $file: $!";
|
#
|
||||||
local $/ = undef;
|
# Left-zero-pads month and day-of-month to 2 digits in dates of format YYYY-(M)M-(D)D
|
||||||
my $project_info_json = <F>;
|
#
|
||||||
close(F);
|
sub normalize_date {
|
||||||
return $project_info_json;
|
my $date = shift;
|
||||||
|
my ($year, $month, $dom) = $date =~ /^(2\d\d\d)-(\d+)-(\d+)$/;
|
||||||
|
return sprintf("%04d-%02d-%02d", $year, $month, $dom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# setup_month_regex
|
# setup_month_regex
|
||||||
#
|
#
|
||||||
|
@ -1038,23 +1019,4 @@ sub setup_lucene_bugzilla_jira_map {
|
||||||
36628 => 432);
|
36628 => 432);
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
|
||||||
# json2perl
|
|
||||||
#
|
|
||||||
# Converts a JSON string to the equivalent Perl data structure
|
|
||||||
#
|
|
||||||
sub json2perl {
|
|
||||||
my $json_string = shift;
|
|
||||||
$json_string =~ s/(:\s*)(true|false)/$1"$2"/g;
|
|
||||||
$json_string =~ s/":/",/g;
|
|
||||||
$json_string =~ s/\'/\\'/g;
|
|
||||||
$json_string =~ s/\"/\'/g;
|
|
||||||
my $project_info = eval $json_string;
|
|
||||||
die "ERROR eval'ing munged JSON string ||$json_string||: $@\n"
|
|
||||||
if ($@);
|
|
||||||
die "ERROR empty value after eval'ing JSON string ||$json_string||\n"
|
|
||||||
unless $project_info;
|
|
||||||
return $project_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -171,6 +171,8 @@ Bug Fixes
|
||||||
|
|
||||||
* SOLR-9729: JDBCStream improvements (Kevin Risden)
|
* SOLR-9729: JDBCStream improvements (Kevin Risden)
|
||||||
|
|
||||||
|
* SOLR-9626: new Admin UI now also highlights matched terms in the Analysis screen. (Alexandre Rafalovitch)
|
||||||
|
|
||||||
Other Changes
|
Other Changes
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -483,7 +483,7 @@
|
||||||
|
|
||||||
<build-changes changes.src.file="${src.export.dir}/solr/CHANGES.txt"
|
<build-changes changes.src.file="${src.export.dir}/solr/CHANGES.txt"
|
||||||
changes.target.dir="${src.export.dir}/solr/docs/changes"
|
changes.target.dir="${src.export.dir}/solr/docs/changes"
|
||||||
changes.product="SOLR"/>
|
changes.product="solr"/>
|
||||||
|
|
||||||
<tar destfile="${source.package.file}" compression="gzip" longfile="gnu">
|
<tar destfile="${source.package.file}" compression="gzip" longfile="gnu">
|
||||||
<tarfileset dir="${src.export.dir}/lucene"
|
<tarfileset dir="${src.export.dir}/lucene"
|
||||||
|
@ -623,7 +623,7 @@
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="changes-to-html" depends="define-lucene-javadoc-url">
|
<target name="changes-to-html" depends="define-lucene-javadoc-url">
|
||||||
<build-changes changes.product="SOLR"/>
|
<build-changes changes.product="solr"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="sign-artifacts">
|
<target name="sign-artifacts">
|
||||||
|
|
|
@ -188,10 +188,10 @@ class JSONWriter extends TextResponseWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Represents a NamedList directly as a JSON Object (essentially a Map)
|
/** Represents a NamedList directly as a JSON Object (essentially a Map)
|
||||||
* repeating any keys if they are repeated in the NamedList. null is mapped
|
* repeating any keys if they are repeated in the NamedList.
|
||||||
* to "".
|
* null key is mapped to "".
|
||||||
*/
|
*/
|
||||||
// NamedList("a"=1,"bar"="foo",null=3) => {"a":1,"bar":"foo","":3}
|
// NamedList("a"=1,"bar"="foo",null=3,null=null) => {"a":1,"bar":"foo","":3,"":null}
|
||||||
protected void writeNamedListAsMapWithDups(String name, NamedList val) throws IOException {
|
protected void writeNamedListAsMapWithDups(String name, NamedList val) throws IOException {
|
||||||
int sz = val.size();
|
int sz = val.size();
|
||||||
writeMapOpener(sz);
|
writeMapOpener(sz);
|
||||||
|
@ -214,7 +214,7 @@ class JSONWriter extends TextResponseWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Represents a NamedList directly as an array of JSON objects...
|
// Represents a NamedList directly as an array of JSON objects...
|
||||||
// NamedList("a"=1,"b"=2,null=3) => [{"a":1},{"b":2},3]
|
// NamedList("a"=1,"b"=2,null=3,null=null) => [{"a":1},{"b":2},3,null]
|
||||||
protected void writeNamedListAsArrMap(String name, NamedList val) throws IOException {
|
protected void writeNamedListAsArrMap(String name, NamedList val) throws IOException {
|
||||||
int sz = val.size();
|
int sz = val.size();
|
||||||
indent();
|
indent();
|
||||||
|
@ -249,7 +249,7 @@ class JSONWriter extends TextResponseWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Represents a NamedList directly as an array of JSON objects...
|
// Represents a NamedList directly as an array of JSON objects...
|
||||||
// NamedList("a"=1,"b"=2,null=3) => [["a",1],["b",2],[null,3]]
|
// NamedList("a"=1,"b"=2,null=3,null=null) => [["a",1],["b",2],[null,3],[null,null]]
|
||||||
protected void writeNamedListAsArrArr(String name, NamedList val) throws IOException {
|
protected void writeNamedListAsArrArr(String name, NamedList val) throws IOException {
|
||||||
int sz = val.size();
|
int sz = val.size();
|
||||||
indent();
|
indent();
|
||||||
|
@ -293,7 +293,7 @@ class JSONWriter extends TextResponseWriter {
|
||||||
|
|
||||||
// Represents a NamedList directly as an array with keys/values
|
// Represents a NamedList directly as an array with keys/values
|
||||||
// interleaved.
|
// interleaved.
|
||||||
// NamedList("a"=1,"b"=2,null=3) => ["a",1,"b",2,null,3]
|
// NamedList("a"=1,"b"=2,null=3,null=null) => ["a",1,"b",2,null,3,null,null]
|
||||||
protected void writeNamedListAsFlat(String name, NamedList val) throws IOException {
|
protected void writeNamedListAsFlat(String name, NamedList val) throws IOException {
|
||||||
int sz = val.size();
|
int sz = val.size();
|
||||||
writeArrayOpener(sz*2);
|
writeArrayOpener(sz*2);
|
||||||
|
@ -676,7 +676,7 @@ class JSONWriter extends TextResponseWriter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes NamedLists directly as an array of NamedValuePair JSON objects...
|
* Writes NamedLists directly as an array of NamedValuePair JSON objects...
|
||||||
* NamedList("a"=1,"b"=2,null=3) => [{"name":"a","int":1},{"name":"b","int":2},{"int":3}]
|
* NamedList("a"=1,"b"=2,null=3,null=null) => [{"name":"a","int":1},{"name":"b","int":2},{"int":3},{"null":null}]
|
||||||
* NamedList("a"=1,"bar"="foo",null=3.4f) => [{"name":"a","int":1},{"name":"bar","str":"foo"},{"float":3.4}]
|
* NamedList("a"=1,"bar"="foo",null=3.4f) => [{"name":"a","int":1},{"name":"bar","str":"foo"},{"float":3.4}]
|
||||||
*/
|
*/
|
||||||
class ArrayOfNamedValuePairJSONWriter extends JSONWriter {
|
class ArrayOfNamedValuePairJSONWriter extends JSONWriter {
|
||||||
|
|
|
@ -98,6 +98,7 @@ public class JSONWriterTest extends SolrTestCaseJ4 {
|
||||||
NamedList nl = new NamedList();
|
NamedList nl = new NamedList();
|
||||||
nl.add("data1", "he\u2028llo\u2029!"); // make sure that 2028 and 2029 are both escaped (they are illegal in javascript)
|
nl.add("data1", "he\u2028llo\u2029!"); // make sure that 2028 and 2029 are both escaped (they are illegal in javascript)
|
||||||
nl.add(null, 42);
|
nl.add(null, 42);
|
||||||
|
nl.add(null, null);
|
||||||
rsp.add("nl", nl);
|
rsp.add("nl", nl);
|
||||||
|
|
||||||
rsp.add("byte", Byte.valueOf((byte)-3));
|
rsp.add("byte", Byte.valueOf((byte)-3));
|
||||||
|
@ -108,15 +109,15 @@ public class JSONWriterTest extends SolrTestCaseJ4 {
|
||||||
|
|
||||||
final String expectedNLjson;
|
final String expectedNLjson;
|
||||||
if (namedListStyle == JSONWriter.JSON_NL_FLAT) {
|
if (namedListStyle == JSONWriter.JSON_NL_FLAT) {
|
||||||
expectedNLjson = "\"nl\":[\"data1\",\"he\\u2028llo\\u2029!\",null,42]";
|
expectedNLjson = "\"nl\":[\"data1\",\"he\\u2028llo\\u2029!\",null,42,null,null]";
|
||||||
} else if (namedListStyle == JSONWriter.JSON_NL_MAP) {
|
} else if (namedListStyle == JSONWriter.JSON_NL_MAP) {
|
||||||
expectedNLjson = "\"nl\":{\"data1\":\"he\\u2028llo\\u2029!\",\"\":42}";
|
expectedNLjson = "\"nl\":{\"data1\":\"he\\u2028llo\\u2029!\",\"\":42,\"\":null}";
|
||||||
} else if (namedListStyle == JSONWriter.JSON_NL_ARROFARR) {
|
} else if (namedListStyle == JSONWriter.JSON_NL_ARROFARR) {
|
||||||
expectedNLjson = "\"nl\":[[\"data1\",\"he\\u2028llo\\u2029!\"],[null,42]]";
|
expectedNLjson = "\"nl\":[[\"data1\",\"he\\u2028llo\\u2029!\"],[null,42],[null,null]]";
|
||||||
} else if (namedListStyle == JSONWriter.JSON_NL_ARROFMAP) {
|
} else if (namedListStyle == JSONWriter.JSON_NL_ARROFMAP) {
|
||||||
expectedNLjson = "\"nl\":[{\"data1\":\"he\\u2028llo\\u2029!\"},42]";
|
expectedNLjson = "\"nl\":[{\"data1\":\"he\\u2028llo\\u2029!\"},42,null]";
|
||||||
} else if (namedListStyle == JSONWriter.JSON_NL_ARROFNVP) {
|
} else if (namedListStyle == JSONWriter.JSON_NL_ARROFNVP) {
|
||||||
expectedNLjson = "\"nl\":[{\"name\":\"data1\",\"str\":\"he\\u2028llo\\u2029!\"},{\"int\":42}]";
|
expectedNLjson = "\"nl\":[{\"name\":\"data1\",\"str\":\"he\\u2028llo\\u2029!\"},{\"int\":42},{\"null\":null}]";
|
||||||
} else {
|
} else {
|
||||||
expectedNLjson = null;
|
expectedNLjson = null;
|
||||||
fail("unexpected namedListStyle="+namedListStyle);
|
fail("unexpected namedListStyle="+namedListStyle);
|
||||||
|
|
|
@ -76,9 +76,17 @@ solrAdminApp.controller('AnalysisController',
|
||||||
|
|
||||||
for (key in tokenhash) {
|
for (key in tokenhash) {
|
||||||
if (key == "match" || key=="positionHistory") {
|
if (key == "match" || key=="positionHistory") {
|
||||||
//@ todo do something
|
//skip, to not display these keys in the UI
|
||||||
} else {
|
} else {
|
||||||
token.keys.push({name:key, value:tokenhash[key]});
|
var tokenInfo = new Object();
|
||||||
|
tokenInfo.name = key;
|
||||||
|
tokenInfo.value = tokenhash[key];
|
||||||
|
if ('text' === key || 'raw_bytes' === key ) {
|
||||||
|
if (tokenhash.match) {
|
||||||
|
tokenInfo.extraclass = 'match'; //to highlight matching text strings
|
||||||
|
}
|
||||||
|
}
|
||||||
|
token.keys.push(tokenInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tokens.push(token);
|
tokens.push(token);
|
||||||
|
|
|
@ -106,7 +106,7 @@ limitations under the License.
|
||||||
<td class="details">
|
<td class="details">
|
||||||
<table border="0" cellspacing="0" cellpadding="0">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="{{value.name}}" ng-repeat="value in token.keys" ng-show="verbose || value.name=='text'">
|
<tr class="{{value.name}} {{value.extraclass}}" ng-repeat="value in token.keys" ng-show="verbose || value.name=='text'">
|
||||||
<td>{{value.value}}</td>
|
<td>{{value.value}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
Loading…
Reference in New Issue