You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/08/23 16:07:19 UTC
svn commit: r1160700 [22/22] - in /lucene/dev/branches/flexscoring: ./
dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/lucene/contrib/
dev-tools/idea/lucene/contrib/demo/
dev-tools/idea/lucene/contrib/highlighter/ dev-tools/idea/lucene/contrib/...
Modified: lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java Tue Aug 23 14:06:58 2011
@@ -17,21 +17,21 @@
package org.apache.solr.client.solrj.response;
-import java.io.FileReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
import junit.framework.Assert;
-
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
+import org.apache.solr.common.util.DateUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrResourceLoader;
import org.junit.Test;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.List;
+
/**
- * Simple test for Date facet support in QueryResponse
+ * A few tests for parsing Solr response in QueryResponse
*
* @since solr 1.3
*/
@@ -39,7 +39,7 @@ public class QueryResponseTest extends L
@Test
public void testDateFacets() throws Exception {
XMLResponseParser parser = new XMLResponseParser();
- InputStream is = new SolrResourceLoader(null, null).openResource("sampleDateFacetResponse.xml");
+ InputStream is = new SolrResourceLoader(null, null).openResource("solrj/sampleDateFacetResponse.xml");
assertNotNull(is);
Reader in = new InputStreamReader(is, "UTF-8");
NamedList<Object> response = parser.processResponse(in);
@@ -59,4 +59,161 @@ public class QueryResponseTest extends L
// System.out.println("END: " + f.getEnd());
}
}
+
+ @Test
+ public void testRangeFacets() throws Exception {
+ XMLResponseParser parser = new XMLResponseParser();
+ InputStream is = new SolrResourceLoader(null, null).openResource("solrj/sampleDateFacetResponse.xml");
+ assertNotNull(is);
+ Reader in = new InputStreamReader(is, "UTF-8");
+ NamedList<Object> response = parser.processResponse(in);
+ in.close();
+
+ QueryResponse qr = new QueryResponse(response, null);
+ Assert.assertNotNull(qr);
+
+ int counter = 0;
+ RangeFacet.Numeric price = null;
+ RangeFacet.Date manufacturedateDt = null;
+ for (RangeFacet r : qr.getFacetRanges()){
+ assertNotNull(r);
+ if ("price".equals(r.getName())) {
+ price = (RangeFacet.Numeric) r;
+ } else if ("manufacturedate_dt".equals(r.getName())) {
+ manufacturedateDt = (RangeFacet.Date) r;
+ }
+
+ counter++;
+ }
+ assertEquals(2, counter);
+ assertNotNull(price);
+ assertNotNull(manufacturedateDt);
+
+ assertEquals(0.0F, price.getStart());
+ assertEquals(5.0F, price.getEnd());
+ assertEquals(1.0F, price.getGap());
+ assertEquals("0.0", price.getCounts().get(0).getValue());
+ assertEquals(3, price.getCounts().get(0).getCount());
+ assertEquals("1.0", price.getCounts().get(1).getValue());
+ assertEquals(0, price.getCounts().get(1).getCount());
+ assertEquals("2.0", price.getCounts().get(2).getValue());
+ assertEquals(0, price.getCounts().get(2).getCount());
+ assertEquals("3.0", price.getCounts().get(3).getValue());
+ assertEquals(0, price.getCounts().get(3).getCount());
+ assertEquals("4.0", price.getCounts().get(4).getValue());
+ assertEquals(0, price.getCounts().get(4).getCount());
+
+ assertEquals(DateUtil.parseDate("2005-02-13T15:26:37Z"), manufacturedateDt.getStart());
+ assertEquals(DateUtil.parseDate("2008-02-13T15:26:37Z"), manufacturedateDt.getEnd());
+ assertEquals("+1YEAR", manufacturedateDt.getGap());
+ assertEquals("2005-02-13T15:26:37Z", manufacturedateDt.getCounts().get(0).getValue());
+ assertEquals(4, manufacturedateDt.getCounts().get(0).getCount());
+ assertEquals("2006-02-13T15:26:37Z", manufacturedateDt.getCounts().get(1).getValue());
+ assertEquals(7, manufacturedateDt.getCounts().get(1).getCount());
+ assertEquals("2007-02-13T15:26:37Z", manufacturedateDt.getCounts().get(2).getValue());
+ assertEquals(0, manufacturedateDt.getCounts().get(2).getCount());
+ }
+
+ @Test
+ public void testGroupResponse() throws Exception {
+ XMLResponseParser parser = new XMLResponseParser();
+ InputStream is = new SolrResourceLoader(null, null).openResource("solrj/sampleGroupResponse.xml");
+ assertNotNull(is);
+ Reader in = new InputStreamReader(is, "UTF-8");
+ NamedList<Object> response = parser.processResponse(in);
+ in.close();
+
+ QueryResponse qr = new QueryResponse(response, null);
+ assertNotNull(qr);
+ GroupResponse groupResponse = qr.getGroupResponse();
+ assertNotNull(groupResponse);
+ List<GroupCommand> commands = groupResponse.getValues();
+ assertNotNull(commands);
+ assertEquals(3, commands.size());
+
+ GroupCommand fieldCommand = commands.get(0);
+ assertEquals("acco_id", fieldCommand.getName());
+ assertEquals(30000000, fieldCommand.getMatches());
+ assertEquals(5687, fieldCommand.getNGroups().intValue());
+ List<Group> fieldCommandGroups = fieldCommand.getValues();
+ assertEquals(10, fieldCommandGroups.size());
+ assertEquals("116_ar", fieldCommandGroups.get(0).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(0).getResult().size());
+ assertEquals(2236, fieldCommandGroups.get(0).getResult().getNumFound());
+ assertEquals("116_hi", fieldCommandGroups.get(1).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(1).getResult().size());
+ assertEquals(2234, fieldCommandGroups.get(1).getResult().getNumFound());
+ assertEquals("953_ar", fieldCommandGroups.get(2).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(2).getResult().size());
+ assertEquals(1020, fieldCommandGroups.get(2).getResult().getNumFound());
+ assertEquals("953_hi", fieldCommandGroups.get(3).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(3).getResult().size());
+ assertEquals(1030, fieldCommandGroups.get(3).getResult().getNumFound());
+ assertEquals("954_ar", fieldCommandGroups.get(4).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(4).getResult().size());
+ assertEquals(2236, fieldCommandGroups.get(4).getResult().getNumFound());
+ assertEquals("954_hi", fieldCommandGroups.get(5).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(5).getResult().size());
+ assertEquals(2234, fieldCommandGroups.get(5).getResult().getNumFound());
+ assertEquals("546_ar", fieldCommandGroups.get(6).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(6).getResult().size());
+ assertEquals(4984, fieldCommandGroups.get(6).getResult().getNumFound());
+ assertEquals("546_hi", fieldCommandGroups.get(7).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(7).getResult().size());
+ assertEquals(4984, fieldCommandGroups.get(7).getResult().getNumFound());
+ assertEquals("708_ar", fieldCommandGroups.get(8).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(8).getResult().size());
+ assertEquals(4627, fieldCommandGroups.get(8).getResult().getNumFound());
+ assertEquals("708_hi", fieldCommandGroups.get(9).getGroupValue());
+ assertEquals(2, fieldCommandGroups.get(9).getResult().size());
+ assertEquals(4627, fieldCommandGroups.get(9).getResult().getNumFound());
+
+ GroupCommand funcCommand = commands.get(1);
+ assertEquals("sum(price, price)", funcCommand.getName());
+ assertEquals(30000000, funcCommand.getMatches());
+ assertNull(funcCommand.getNGroups());
+ List<Group> funcCommandGroups = funcCommand.getValues();
+ assertEquals(10, funcCommandGroups.size());
+ assertEquals("95000.0", funcCommandGroups.get(0).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(0).getResult().size());
+ assertEquals(43666, funcCommandGroups.get(0).getResult().getNumFound());
+ assertEquals("91400.0", funcCommandGroups.get(1).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(1).getResult().size());
+ assertEquals(27120, funcCommandGroups.get(1).getResult().getNumFound());
+ assertEquals("104800.0", funcCommandGroups.get(2).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(2).getResult().size());
+ assertEquals(34579, funcCommandGroups.get(2).getResult().getNumFound());
+ assertEquals("99400.0", funcCommandGroups.get(3).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(3).getResult().size());
+ assertEquals(40519, funcCommandGroups.get(3).getResult().getNumFound());
+ assertEquals("109600.0", funcCommandGroups.get(4).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(4).getResult().size());
+ assertEquals(36203, funcCommandGroups.get(4).getResult().getNumFound());
+ assertEquals("102400.0", funcCommandGroups.get(5).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(5).getResult().size());
+ assertEquals(37852, funcCommandGroups.get(5).getResult().getNumFound());
+ assertEquals("116800.0", funcCommandGroups.get(6).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(6).getResult().size());
+ assertEquals(40393, funcCommandGroups.get(6).getResult().getNumFound());
+ assertEquals("107800.0", funcCommandGroups.get(7).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(7).getResult().size());
+ assertEquals(41639, funcCommandGroups.get(7).getResult().getNumFound());
+ assertEquals("136200.0", funcCommandGroups.get(8).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(8).getResult().size());
+ assertEquals(25929, funcCommandGroups.get(8).getResult().getNumFound());
+ assertEquals("131400.0", funcCommandGroups.get(9).getGroupValue());
+ assertEquals(2, funcCommandGroups.get(9).getResult().size());
+ assertEquals(29179, funcCommandGroups.get(9).getResult().getNumFound());
+
+ GroupCommand queryCommand = commands.get(2);
+ assertEquals("country:fr", queryCommand.getName());
+ assertNull(queryCommand.getNGroups());
+ assertEquals(30000000, queryCommand.getMatches());
+ List<Group> queryCommandGroups = queryCommand.getValues();
+ assertEquals(1, queryCommandGroups.size());
+ assertEquals("country:fr", queryCommandGroups.get(0).getGroupValue());
+ assertEquals(2, queryCommandGroups.get(0).getResult().size());
+ assertEquals(57074, queryCommandGroups.get(0).getResult().getNumFound());
+ }
+
}
Modified: lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java Tue Aug 23 14:06:58 2011
@@ -49,7 +49,7 @@ public class ContentStreamTest extends L
public void testFileStream() throws IOException
{
- InputStream is = new SolrResourceLoader(null, null).openResource( "README" );
+ InputStream is = new SolrResourceLoader(null, null).openResource( "solrj/README" );
assertNotNull( is );
File file = new File(TEMP_DIR, "README");
FileOutputStream os = new FileOutputStream(file);
Modified: lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/TestSystemIdResolver.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/TestSystemIdResolver.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/TestSystemIdResolver.java (original)
+++ lucene/dev/branches/flexscoring/solr/solrj/src/test/org/apache/solr/common/util/TestSystemIdResolver.java Tue Aug 23 14:06:58 2011
@@ -38,9 +38,10 @@ public class TestSystemIdResolver extend
}
public void testResolving() throws Exception {
- final ResourceLoader loader = new SolrResourceLoader(SolrTestCaseJ4.TEST_HOME(), this.getClass().getClassLoader());
+ final String testHome = SolrTestCaseJ4.getFile("solrj/solr/conf").getParent();
+ final ResourceLoader loader = new SolrResourceLoader(testHome, this.getClass().getClassLoader());
final SystemIdResolver resolver = new SystemIdResolver(loader);
- final String fileUri = new File(SolrTestCaseJ4.TEST_HOME()+"/crazy-path-to-config.xml").toURI().toASCIIString();
+ final String fileUri = new File(testHome+"/crazy-path-to-config.xml").toURI().toASCIIString();
assertEquals("solrres:/test.xml", SystemIdResolver.createSystemIdFromResourceName("test.xml"));
assertEquals("solrres://@/usr/local/etc/test.xml", SystemIdResolver.createSystemIdFromResourceName("/usr/local/etc/test.xml"));
@@ -60,10 +61,10 @@ public class TestSystemIdResolver extend
assertEntityResolving(resolver, "solrres:/schema.xml", "solrres:/solrconfig.xml", "schema.xml");
assertEntityResolving(resolver, "solrres:/org/apache/solr/common/util/TestSystemIdResolver.class",
"solrres:/org/apache/solr/common/ResourceLoader.class", "util/TestSystemIdResolver.class");
- assertEntityResolving(resolver, SystemIdResolver.createSystemIdFromResourceName(SolrTestCaseJ4.TEST_HOME()+"/conf/schema.xml"),
- SystemIdResolver.createSystemIdFromResourceName(SolrTestCaseJ4.TEST_HOME()+"/conf/solrconfig.xml"), "schema.xml");
- assertEntityResolving(resolver, SystemIdResolver.createSystemIdFromResourceName(SolrTestCaseJ4.TEST_HOME()+"/crazy-path-to-schema.xml"),
- SystemIdResolver.createSystemIdFromResourceName(SolrTestCaseJ4.TEST_HOME()+"/crazy-path-to-config.xml"), "crazy-path-to-schema.xml");
+ assertEntityResolving(resolver, SystemIdResolver.createSystemIdFromResourceName(testHome+"/conf/schema.xml"),
+ SystemIdResolver.createSystemIdFromResourceName(testHome+"/conf/solrconfig.xml"), "schema.xml");
+ assertEntityResolving(resolver, SystemIdResolver.createSystemIdFromResourceName(testHome+"/crazy-path-to-schema.xml"),
+ SystemIdResolver.createSystemIdFromResourceName(testHome+"/crazy-path-to-config.xml"), "crazy-path-to-schema.xml");
// test, that resolving works if somebody uses an absolute file:-URI in a href attribute, the resolver should return null (default fallback)
assertNull(resolver.resolveEntity(null, null, "solrres:/solrconfig.xml", fileUri));
Modified: lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java (original)
+++ lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java Tue Aug 23 14:06:58 2011
@@ -39,7 +39,7 @@ abstract public class SolrJettyTestBase
public static JettySolrRunner createJetty(String solrHome, String configFile, String context) throws Exception {
// creates the data dir
- initCore(null, null);
+ initCore(null, null, solrHome);
ignoreException("maxWarmingSearchers");
Modified: lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java (original)
+++ lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java Tue Aug 23 14:06:58 2011
@@ -76,16 +76,6 @@ public abstract class SolrTestCaseJ4 ext
endTrackingSearchers();
endTrackingWriters();
}
-
- // SOLR-2279: hack to shut these directories down
- // we still keep the ability to track open index files this way
- public static void closeDirectories() throws Exception {
- for (MockDirectoryWrapper d : stores.keySet()) {
- if (d.isOpen()) {
- d.close();
- }
- }
- }
@Override
public void setUp() throws Exception {
@@ -302,7 +292,6 @@ public abstract class SolrTestCaseJ4 ext
public static void deleteCore() throws Exception {
log.info("###deleteCore" );
if (h != null) { h.close(); }
- closeDirectories();
if (dataDir != null) {
String skip = System.getProperty("solr.test.leavedatadir");
if (null != skip && 0 != skip.trim().length()) {
Modified: lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java (original)
+++ lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java Tue Aug 23 14:06:58 2011
@@ -26,10 +26,10 @@ import org.apache.lucene.util.LuceneTest
/**
* Opens a directory with {@link LuceneTestCase#newFSDirectory(File)}
*/
-public class MockDirectoryFactory extends DirectoryFactory {
+public class MockDirectoryFactory extends CachingDirectoryFactory {
@Override
- public Directory open(String path) throws IOException {
+ public Directory create(String path) throws IOException {
return LuceneTestCase.newFSDirectory(new File(path));
}
}
Modified: lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/AbstractSolrTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/AbstractSolrTestCase.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/AbstractSolrTestCase.java (original)
+++ lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/AbstractSolrTestCase.java Tue Aug 23 14:06:58 2011
@@ -193,7 +193,6 @@ public abstract class AbstractSolrTestCa
}
if (h != null) { h.close(); }
- SolrTestCaseJ4.closeDirectories();
String skip = System.getProperty("solr.test.leavedatadir");
if (null != skip && 0 != skip.trim().length()) {
System.err.println("NOTE: per solr.test.leavedatadir, dataDir will not be removed: " + dataDir.getAbsolutePath());
Modified: lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/ExternalPaths.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/ExternalPaths.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/ExternalPaths.java (original)
+++ lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/ExternalPaths.java Tue Aug 23 14:06:58 2011
@@ -37,7 +37,17 @@ public class ExternalPaths {
static String determineSourceHome() {
// ugly, ugly hack to determine the example home without depending on the CWD
// this is needed for example/multicore tests which reside outside the classpath
- File base = SolrTestCaseJ4.getFile("solr/conf").getAbsoluteFile();
+ File file;
+ try {
+ file = new File("solr/conf");
+ if (!file.exists()) {
+ file = new File(Thread.currentThread().getContextClassLoader().getResource("solr/conf").toURI());
+ }
+ } catch (Exception e) {
+ // If there is no "solr/conf" in the classpath, fall back to searching from the current directory.
+ file = new File(".");
+ }
+ File base = file.getAbsoluteFile();
while (!new File(base, "solr/CHANGES.txt").exists()) {
base = base.getParentFile();
}
Modified: lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java (original)
+++ lucene/dev/branches/flexscoring/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java Tue Aug 23 14:06:58 2011
@@ -71,8 +71,8 @@ import java.util.Map;
public class TestHarness {
protected CoreContainer container;
private SolrCore core;
- private XPath xpath = XPathFactory.newInstance().newXPath();
- private DocumentBuilder builder;
+ private final ThreadLocal<DocumentBuilder> builderTL = new ThreadLocal<DocumentBuilder>();
+ private final ThreadLocal<XPath> xpathTL = new ThreadLocal<XPath>();
public XmlUpdateRequestHandler updater;
public static SolrConfig createConfig(String confFile) {
@@ -145,15 +145,40 @@ public class TestHarness {
core = container.getCore(coreName);
if (core != null)
core.close();
- builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-
+
updater = new XmlUpdateRequestHandler();
updater.init( null );
} catch (Exception e) {
throw new RuntimeException(e);
}
}
-
+
+ private DocumentBuilder getXmlDocumentBuilder() {
+ try {
+ DocumentBuilder builder = builderTL.get();
+ if (builder == null) {
+ builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ builderTL.set(builder);
+ }
+ return builder;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private XPath getXpath() {
+ try {
+ XPath xpath = xpathTL.get();
+ if (xpath == null) {
+ xpath = XPathFactory.newInstance().newXPath();
+ xpathTL.set(xpath);
+ }
+ return xpath;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
// Creates a container based on infos needed to create one core
static class Initializer extends CoreContainer.Initializer {
String coreName;
@@ -364,7 +389,7 @@ public class TestHarness {
Document document=null;
try {
- document = builder.parse(new ByteArrayInputStream
+ document = getXmlDocumentBuilder().parse(new ByteArrayInputStream
(xml.getBytes("UTF-8")));
} catch (UnsupportedEncodingException e1) {
throw new RuntimeException("Totally weird UTF-8 exception", e1);
@@ -374,7 +399,7 @@ public class TestHarness {
for (String xp : tests) {
xp=xp.trim();
- Boolean bool = (Boolean) xpath.evaluate(xp, document,
+ Boolean bool = (Boolean) getXpath().evaluate(xp, document,
XPathConstants.BOOLEAN);
if (!bool) {
Modified: lucene/dev/branches/flexscoring/solr/webapp/web/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/webapp/web/WEB-INF/web.xml?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/webapp/web/WEB-INF/web.xml (original)
+++ lucene/dev/branches/flexscoring/solr/webapp/web/WEB-INF/web.xml Tue Aug 23 14:06:58 2011
@@ -99,4 +99,9 @@
<mime-type>application/xslt+xml</mime-type>
</mime-mapping>
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>index.html</welcome-file>
+ </welcome-file-list>
+
</web-app>
Modified: lucene/dev/branches/flexscoring/solr/webapp/web/css/screen.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/webapp/web/css/screen.css?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/webapp/web/css/screen.css (original)
+++ lucene/dev/branches/flexscoring/solr/webapp/web/css/screen.css Tue Aug 23 14:06:58 2011
@@ -39,6 +39,11 @@ pre
text-align: left;
}
+abbr
+{
+ cursor: help;
+}
+
ul
{
list-style: none;
@@ -110,7 +115,7 @@ ul
{
border: 1px solid #c0c0c0;
min-height: 600px;
- min-width:750px;
+ min-width: 750px;
position: relative;
}
@@ -753,10 +758,36 @@ pre.syntax .tex .formula
/* analysis */
-#content #analysis .settings
+#content #analysis-holder
+{
+ background-image: url( ../img/div.gif );
+ background-position: 50% 0;
+ background-repeat: repeat-y;
+}
+
+#content #analysis #field-analysis
+{
+ margin-bottom: 0;
+}
+
+#content #analysis #field-analysis .content
+{
+ padding-bottom: 0;
+}
+
+#content #analysis .settings-holder
{
clear: both;
+ padding-top: 15px;
+}
+
+#content #analysis .settings
+{
+ background-color: #fff;
+ border-top: 1px solid #fafafa;
+ border-bottom: 1px solid #fafafa;
padding-top: 10px;
+ padding-bottom: 10px;
}
#content #analysis .settings select.loader
@@ -779,7 +810,7 @@ pre.syntax .tex .formula
#content #analysis .settings div
{
float: right;
- width: 49%;
+ width: 47%;
}
#content #analysis .settings button
@@ -787,6 +818,32 @@ pre.syntax .tex .formula
float: right;
}
+#content #analysis .settings button.loader
+{
+ background-position: 2px 50%;
+ padding-left: 21px;
+}
+
+#content #analysis .settings .verbose_output
+{
+ float: left;
+ width: auto;
+}
+
+#content #analysis .settings .verbose_output a
+{
+ background-image: url( ../img/ico/ui-check-box-uncheck.png );
+ background-position: 0 50%;
+ color: #999;
+ display: block;
+ padding-left: 21px;
+}
+
+#content #analysis .settings .verbose_output.active a
+{
+ background-image: url( ../img/ico/ui-check-box.png );
+}
+
#content #analysis .index label,
#content #analysis .query label
{
@@ -804,7 +861,7 @@ pre.syntax .tex .formula
{
float: left;
margin-right: 0.5%;
- min-width: 49%;
+ min-width: 47%;
max-width: 99%;
}
@@ -812,7 +869,7 @@ pre.syntax .tex .formula
{
float: right;
margin-left: 0.5%;
- min-width: 49%;
+ min-width: 47%;
max-width: 99%;
}
@@ -829,117 +886,135 @@ pre.syntax .tex .formula
padding-left: 35px;
}
-#content #analysis .analysis-result h2
+#content #analysis #analysis-result
{
- position: relative;
+ overflow: auto;
}
-#content #analysis .analysis-result h2 .verbose_output
+#content #analysis #analysis-result .index,
+#content #analysis #analysis-result .query
{
- position: absolute;
- right: 5px;
- top: 5px;
+ background-color: #fff;
+ padding-top: 20px;
}
-#content #analysis .analysis-result h2 .verbose_output a
+#content #analysis #analysis-result table
{
- background-image: url( ../img/ico/ui-check-box-uncheck.png );
- background-position: 0 50%;
- color: #999;
- display: block;
- padding-left: 21px;
+ border-collapse: collapse;
}
-#content #analysis .analysis-result.verbose_output h2 .verbose_output a
+#content #analysis #analysis-result td
{
- background-image: url( ../img/ico/ui-check-box.png );
- color: #080;
+ vertical-align: top;
+ white-space: nowrap;
}
-#content #analysis .analysis-result .index,
-#content #analysis .analysis-result .query
+#content #analysis #analysis-result td.part.analyzer div,
+#content #analysis #analysis-result td.part.spacer .holder,
+#content #analysis #analysis-result td td td
{
- margin-bottom: 10px;
+ padding-top: 1px;
+ padding-bottom: 1px;
}
-#content #analysis .analysis-result .row
+#content #analysis #analysis-result td.legend,
+#content #analysis #analysis-result td.data tr.verbose_output
{
- border-top: 1px solid #f0f0f0;
- margin-top: 10px;
- padding-top: 10px;
+ display: none;
}
-#content #analysis .analysis-result .row:first-child
+#content #analysis #analysis-result.verbose_output td.legend
{
- border-top: 0;
- margin-top: 0;
- padding-top: 0;
+ display: table-cell;
}
-#content #analysis .analysis-result .row .analyzer
+#content #analysis #analysis-result.verbose_output td.data tr.verbose_output
{
- color: #c0c0c0;
+ display: table-row;
}
-#content #analysis .analysis-result .row:hover .analyzer
+#content #analysis #analysis-result .match
{
- color: #333;
+ background-color: #e9eff7;
+ background-color: #f2f2ff;
}
-#content #analysis .analysis-result .row table tr.verbose_output
+#content #analysis #analysis-result td.part
{
- display: none;
+ padding-bottom: 10px;
}
-#content #analysis .analysis-result.verbose_output .row table tr.verbose_output
+#content #analysis #analysis-result td.part.analyzer div
{
- display: table-row;
+ border-right: 1px solid #f0f0f0;
+ padding-right: 10px;
}
-#content #analysis .analysis-result .row table th,
-#content #analysis .analysis-result .row table td
+#content #analysis #analysis-result td.part.analyzer abbr
{
- border-top: 1px solid #f0f0f0;
- vertical-align: top;
+ color: #c0c0c0;
}
-#content #analysis .analysis-result .row table th
+#content #analysis #analysis-result td.part.legend .holder,
+#content #analysis #analysis-result td.part.data .holder
{
- background-color: #f8f8f8;
- color: #999;
- padding: 2px;
- padding-bottom: 0;
+ padding-left: 10px;
+ padding-right: 10px;
+ border-right: 1px solid #c0c0c0;
}
-#content #analysis .analysis-result .row table th abbr
+#content #analysis #analysis-result td.part.legend td
{
- border: 0;
- cursor: help;
+ color: #c0c0c0;
}
-#content #analysis .analysis-result .row table td
+#content #analysis #analysis-result td.part.legend .holder
{
- border-left: 1px solid #dcdcdc;
+ border-right-color: #f0f0f0;
}
-#content #analysis .analysis-result .row table td div
+#content #analysis #analysis-result td.part.data:last-child .holder
{
- border-top: 1px solid #f0f0f0;
- display: block;
- padding: 1px 2px;
+ padding-right: 0;
+ border-right: 0;
+}
+
+#content #analysis #analysis-result td.details
+{
+ padding-left: 10px;
+ padding-right: 10px;
+ border-left: 1px solid #f0f0f0;
+ border-right: 1px solid #f0f0f0;
+}
+
+#content #analysis #analysis-result td.details:first-child
+{
+ padding-left: 0;
+ border-left: 0;
+}
+
+#content #analysis #analysis-result td.details:last-child
+{
+ padding-right: 0;
+ border-right: 0;
}
-#content #analysis .analysis-result .row table td div.empty
+#content #analysis #analysis-result td.details tr.empty td
{
color: #f0f0f0;
}
-#content #analysis .analysis-result .row table td div.match
+#content #analysis #analysis-result td.details tr.raw_bytes td
{
- background-color: #e9eff7;
+ letter-spacing: -1px;
+}
+
+#content #analysis #analysis-result .part table table td
+{
+ border-top: 1px solid #f0f0f0;
}
-#content #analysis .analysis-result .row table td div:first-child
+#content #analysis #analysis-result .part table table tr:first-child td
{
border-top: 0;
}
Modified: lucene/dev/branches/flexscoring/solr/webapp/web/index.jsp
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/webapp/web/index.jsp?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/webapp/web/index.jsp (original)
+++ lucene/dev/branches/flexscoring/solr/webapp/web/index.jsp Tue Aug 23 14:06:58 2011
@@ -38,7 +38,7 @@
<div id="wip-notice">
<p>This interface is work in progress. It works best in Chrome.</p>
<p><a href="admin">Use the <span>old admin interface</span> if there are problems with this one.</a></p>
- <p><a href="https://issues.apache.org/jira/browse/SOLR-2399">Bugs/Requests/Suggestions: <span>SOLR-2399</span></a></p>
+ <p><a href="https://issues.apache.org/jira/browse/SOLR-2667">Bugs/Requests/Suggestions: <span>SOLR-2667</span></a></p>
</div>
<p id="environment"> </p>
Modified: lucene/dev/branches/flexscoring/solr/webapp/web/js/script.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/webapp/web/js/script.js?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/webapp/web/js/script.js (original)
+++ lucene/dev/branches/flexscoring/solr/webapp/web/js/script.js Tue Aug 23 14:06:58 2011
@@ -14,6 +14,16 @@ var loader = {
};
+Number.prototype.esc = function()
+{
+ return new String( this ).esc();
+}
+
+String.prototype.esc = function()
+{
+ return this.replace( /</g, '<' ).replace( />/g, '>' );
+}
+
var sammy = $.sammy
(
function()
@@ -712,7 +722,7 @@ var sammy = $.sammy
for( var key in response.levels )
{
- var level = response.levels[key];
+ var level = response.levels[key].esc();
loglevel += '<li class="' + level + '"><a>' + level + '</a></li>' + "\n";
}
@@ -754,8 +764,8 @@ var sammy = $.sammy
logger_content += '<li class="jstree-leaf">';
logger_content += '<ins class="jstree-icon"> </ins>';
logger_content += '<a class="trigger ' + classes.join( ' ' ) + '" ' + "\n" +
- 'title="' + logger_name + '"><span>' + "\n" +
- logger_name.split( '.' ).pop() + "\n" +
+ 'title="' + logger_name.esc() + '"><span>' + "\n" +
+ logger_name.split( '.' ).pop().esc() + "\n" +
'</span></a>';
logger_content += loglevel
@@ -800,7 +810,7 @@ var sammy = $.sammy
function( index, element )
{
var element = $( element );
- var effective_level = $( '.effective_level span', element ).html();
+ var effective_level = $( '.effective_level span', element ).text();
element
.css( 'z-index', 800 - index );
@@ -891,11 +901,11 @@ var sammy = $.sammy
}
var item_content = '<li><dl class="' + item_class + '">' + "\n" +
- '<dt>' + displayed_key + '</dt>' + "\n";
+ '<dt>' + displayed_key.esc() + '</dt>' + "\n";
for( var i in displayed_value )
{
- item_content += '<dd>' + displayed_value[i] + '</dd>' + "\n";
+ item_content += '<dd>' + displayed_value[i].esc() + '</dd>' + "\n";
}
item_content += '</dl></li>';
@@ -965,8 +975,8 @@ var sammy = $.sammy
var c = 0;
for( var i = 1; i < threadDumpData.length; i += 2 )
{
- var state = threadDumpData[i].state;
- var name = '<a><span>' + threadDumpData[i].name + '</span></a>';
+ var state = threadDumpData[i].state.esc();
+ var name = '<a><span>' + threadDumpData[i].name.esc() + '</span></a>';
var classes = [state];
var details = '';
@@ -979,7 +989,7 @@ var sammy = $.sammy
if( threadDumpData[i].lock )
{
classes.push( 'lock' );
- name += "\n" + '<p title="Waiting on">' + threadDumpData[i].lock + '</p>';
+ name += "\n" + '<p title="Waiting on">' + threadDumpData[i].lock.esc() + '</p>';
}
if( threadDumpData[i].stackTrace && 0 !== threadDumpData[i].stackTrace.length )
@@ -987,8 +997,10 @@ var sammy = $.sammy
classes.push( 'stacktrace' );
var stack_trace = threadDumpData[i].stackTrace
- .join( '</li><li>' )
- .replace( /\(/g, '​(' );
+ .join( '###' )
+ .esc()
+ .replace( /\(/g, '​(' )
+ .replace( /###/g, '</li><li>' );
name += '<div>' + "\n"
+ '<ul>' + "\n"
@@ -1000,10 +1012,10 @@ var sammy = $.sammy
var item = '<tr class="' + classes.join( ' ' ) +'">' + "\n"
+ '<td class="ico" title="' + state +'"><span>' + state +'</span></td>' + "\n"
- + '<td class="id">' + threadDumpData[i].id + '</td>' + "\n"
+ + '<td class="id">' + threadDumpData[i].id.esc() + '</td>' + "\n"
+ '<td class="name">' + name + '</td>' + "\n"
- + '<td class="time">' + threadDumpData[i].cpuTime + '</td>' + "\n"
- + '<td class="time">' + threadDumpData[i].userTime + '</td>' + "\n"
+ + '<td class="time">' + threadDumpData[i].cpuTime.esc() + '</td>' + "\n"
+ + '<td class="time">' + threadDumpData[i].userTime.esc() + '</td>' + "\n"
+ '</tr>';
@@ -3402,6 +3414,8 @@ var sammy = $.sammy
var analysis_element = $( '#analysis', content_element );
var analysis_form = $( 'form', analysis_element );
+ var analysis_result = $( '#analysis-result', analysis_element );
+ analysis_result.hide();
$.ajax
(
@@ -3465,10 +3479,56 @@ var sammy = $.sammy
}
}
);
+
+ $( '.verbose_output a', analysis_element )
+ .die( 'click' )
+ .live
+ (
+ 'click',
+ function( event )
+ {
+ $( this ).parent()
+ .toggleClass( 'active' );
+
+ analysis_result
+ .toggleClass( 'verbose_output' );
+
+ check_empty_spacer();
+ }
+ );
- var analysis_result = $( '.analysis-result', analysis_element );
- analysis_result_tpl = analysis_result.clone();
- analysis_result.remove();
+ var check_empty_spacer = function()
+ {
+ var spacer_holder = $( 'td.part.data.spacer .holder', analysis_result );
+
+ if( 0 === spacer_holder.size() )
+ {
+ return false;
+ }
+
+ var verbose_output = analysis_result.hasClass( 'verbose_output' );
+
+ spacer_holder
+ .each
+ (
+ function( index, element )
+ {
+ element = $( element );
+
+ if( verbose_output )
+ {
+ var cell = element.parent();
+ element.height( cell.height() );
+ }
+ else
+ {
+ element.removeAttr( 'style' );
+ }
+ }
+ );
+ }
+
+ var button = $( 'button', analysis_form )
analysis_form
.ajaxForm
@@ -3478,10 +3538,8 @@ var sammy = $.sammy
dataType : 'json',
beforeSubmit : function( array, form, options )
{
- //loader
-
- $( '.analysis-result', analysis_element )
- .remove();
+ loader.show( button );
+ button.attr( 'disabled', true );
array.push( { name: 'analysis.showmatch', value: 'true' } );
@@ -3491,6 +3549,10 @@ var sammy = $.sammy
},
success : function( response, status_text, xhr, form )
{
+ analysis_result
+ .empty()
+ .show();
+
for( var name in response.analysis.field_names )
{
build_analysis_table( 'name', name, response.analysis.field_names[name] );
@@ -3500,6 +3562,8 @@ var sammy = $.sammy
{
build_analysis_table( 'type', name, response.analysis.field_types[name] );
}
+
+ check_empty_spacer();
},
error : function( xhr, text_status, error_thrown )
{
@@ -3508,136 +3572,208 @@ var sammy = $.sammy
},
complete : function()
{
- //loader
+ loader.hide( $( 'button', analysis_form ) );
+ button.removeAttr( 'disabled' );
}
}
);
+
+ var generate_class_name = function( type )
+ {
+ var classes = [type];
+ if( 'text' !== type )
+ {
+ classes.push( 'verbose_output' );
+ }
+ return classes.join( ' ' );
+ }
var build_analysis_table = function( field_or_name, name, analysis_data )
- {
- var analysis_result_data = analysis_result_tpl.clone();
- var content = [];
-
+ {
for( var type in analysis_data )
{
var type_length = analysis_data[type].length;
if( 0 !== type_length )
{
- var type_content = '<div class="' + type + '">' + "\n";
- for( var i = 0; i < type_length; i += 2 )
+ var global_elements_count = 0;
+ for( var i = 0; i < analysis_data[type].length; i += 2 )
{
- type_content += '<div class="row">' + "\n";
+ if( 'string' === typeof analysis_data[type][i+1] )
+ {
+ analysis_data[type][i+1] = [{ 'text': analysis_data[type][i+1] }]
+ }
+ global_elements_count = Math.max( global_elements_count,
+ analysis_data[type][i+1].length );
+ }
+
+ var content = '<div class="' + type + '">' + "\n";
+ content += '<table border="0" cellspacing="0" cellpadding="0">' + "\n";
- var analyzer_parts = analysis_data[type][i].split( '.' );
- var analyzer_parts_name = analyzer_parts.pop();
- var analyzer_parts_namespace = analyzer_parts.join( '.' ) + '.';
-
- type_content += '<div class="analyzer" title="' + analysis_data[type][i] +'">' +
- analyzer_parts_name + '</div>' + "\n";
-
- var raw_parts = {
- 'position' : [],
- 'text' : [],
- 'type' : [],
- 'start-end' : []
- };
+ for( var i = 0; i < analysis_data[type].length; i += 2 )
+ {
+ var colspan = 1;
+ var elements = analysis_data[type][i+1];
+ var elements_count = global_elements_count;
- for( var k in analysis_data[type][i+1] )
+ if( !elements[0].positionHistory )
{
- var pos = analysis_data[type][i+1][k]['position'] - 1;
- var is_match = !!analysis_data[type][i+1][k]['match'];
-
- if( 'undefined' === typeof raw_parts['text'][pos] )
+ colspan = elements_count;
+ elements_count = 1;
+ }
+
+ var legend = [];
+ for( var key in elements[0] )
+ {
+ var key_parts = key.split( '#' );
+ var used_key = key_parts.pop();
+ var short_key = used_key;
+
+ if( 1 === key_parts.length )
{
- raw_parts['position'][pos] = [];
- raw_parts['text'][pos] = [];
- raw_parts['type'][pos] = [];
- raw_parts['start-end'][pos] = [];
+ used_key = '<abbr title="' + key + '">' + used_key + '</abbr>';
+ }
- raw_parts['position'][pos].push( '<div>' + analysis_data[type][i+1][k]['position'] + '</div>' );
+ if( 'positionHistory' === short_key || 'match' === short_key )
+ {
+ continue;
}
- raw_parts['text'][pos].push( '<div class="' + ( is_match ? 'match' : '' ) + '">' + analysis_data[type][i+1][k]['text'] + '</div>' );
- raw_parts['type'][pos].push( '<div>' + analysis_data[type][i+1][k]['type'] + '</div>' );
- raw_parts['start-end'][pos].push( '<div>' + analysis_data[type][i+1][k]['start'] + 'â' + analysis_data[type][i+1][k]['end'] + '</div>' );
+ legend.push
+ (
+ '<tr class="' + generate_class_name( short_key ) + '">' +
+ '<td>' + used_key + '</td>' +
+ '</tr>'
+ );
}
- var parts = {
- 'position' : [],
- 'text' : [],
- 'type' : [],
- 'start-end' : []
- };
+ content += '<tbody>' + "\n";
+ content += '<tr class="step">' + "\n";
+
+ // analyzer
+ var analyzer_name = analysis_data[type][i]
+ .replace( /(\$1)+$/g, '' );
+
+ var analyzer_short = -1 !== analyzer_name.indexOf( '$' )
+ ? analyzer_name.split( '$' )[1]
+ : analyzer_name.split( '.' ).pop();
+ analyzer_short = analyzer_short.match( /[A-Z]/g ).join( '' );
+
+ content += '<td class="part analyzer"><div>' + "\n";
+ content += '<abbr title="' + analysis_data[type][i] + '">' + "\n";
+ content += analyzer_short + '</abbr></div></td>' + "\n";
+
+ // legend
+ content += '<td class="part legend"><div class="holder">' + "\n";
+ content += '<table border="0" cellspacing="0" cellpadding="0">' + "\n";
+ content += '<tr><td>' + "\n";
+ content += '<table border="0" cellspacing="0" cellpadding="0">' + "\n";
+ content += legend.join( "\n" ) + "\n";
+ content += '</table></td></tr></table></td>' + "\n";
+
+ // data
+ var cell_content = '<td class="part data spacer" '
+ + ' colspan="' + colspan + '">'
+ + '<div class="holder"> </div>'
+ + '</td>';
+ var cells = new Array( elements_count + 1 ).join( cell_content );
+ content += cells + "\n";
+
+ content += '</tr>' + "\n";
+ content += '</tbody>' + "\n";
+ }
+ content += '</table>' + "\n";
+ content += '</div>' + "\n";
+
+ $( '.' + type, analysis_result )
+ .remove();
- for( var key in raw_parts )
+ analysis_result
+ .append( content );
+
+ var analysis_result_type = $( '.' + type, analysis_result );
+
+ for( var i = 0; i < analysis_data[type].length; i += 2 )
+ {
+ for( var j = 0; j < analysis_data[type][i+1].length; j += 1 )
{
- var length = raw_parts[key].length;
- for( var j = 0; j < length; j++ )
+ var pos = analysis_data[type][i+1][j].positionHistory
+ ? analysis_data[type][i+1][j].positionHistory[0]
+ : 1;
+ var selector = 'tr.step:eq(' + ( i / 2 ) +') '
+ + 'td.data:eq(' + ( pos - 1 ) + ') '
+ + '.holder';
+ var cell = $( selector, analysis_result_type );
+
+ cell.parent()
+ .removeClass( 'spacer' );
+
+ var table = $( 'table tr.details', cell );
+ if( 0 === table.size() )
{
- if( raw_parts[key][j] )
+ cell
+ .html
+ (
+ '<table border="0" cellspacing="0" cellpadding="0">' +
+ '<tr class="details"></tr></table>'
+ );
+ var table = $( 'table tr.details', cell );
+ }
+
+ var tokens = [];
+ for( var key in analysis_data[type][i+1][j] )
+ {
+ var short_key = key.split( '#' ).pop();
+
+ if( 'positionHistory' === short_key || 'match' === short_key )
+ {
+ continue;
+ }
+
+ var classes = [];
+ classes.push( generate_class_name( short_key ) );
+
+ var data = analysis_data[type][i+1][j][key];
+ if( 'object' === typeof data && data instanceof Array )
+ {
+ data = data.join( ' ' );
+ }
+ if( 'string' === typeof data )
+ {
+ data = data.esc();
+ }
+
+ if( null === data || 0 === data.length )
{
- parts[key].push( '<td>' + raw_parts[key][j].join( "\n" ) + '</td>' );
+ classes.push( 'empty' );
+ data = '∅';
}
- else
+
+ if( analysis_data[type][i+1][j].match &&
+ ( 'text' === short_key || 'raw_bytes' === short_key ) )
{
- parts[key].push( '<td><div class="empty">∅</div></td>' );
+ classes.push( 'match' );
}
+
+ tokens.push
+ (
+ '<tr class="' + classes.join( ' ' ) + '">' +
+ '<td>' + data + '</td>' +
+ '</tr>'
+ );
}
+ table
+ .append
+ (
+ '<td class="details">' +
+ '<table border="0" cellspacing="0" cellpadding="0">' +
+ tokens.join( "\n" ) +
+ '</table></td>'
+ );
}
-
- type_content += '<div class="result">' + "\n";
- type_content += '<table border="0" cellspacing="0" cellpadding="0">' + "\n";
-
- type_content += '<tr class="verbose_output">' + "\n";
- type_content += '<th><abbr title="Position">P</abbr></th>' + "\n";
- type_content += parts['position'].join( "\n" ) + "\n";
- type_content += '</tr>' + "\n";
-
- type_content += '<tr>' + "\n";
- type_content += '<th><abbr title="Text">T</abbr></th>' + "\n";
- type_content += parts['text'].join( "\n" ) + "\n";
- type_content += '</tr>' + "\n";
-
- type_content += '<tr class="verbose_output">' + "\n";
- type_content += '<th><abbr title="Type">T</abbr></th>' + "\n";
- type_content += parts['type'].join( "\n" ) + "\n";
- type_content += '</tr>' + "\n";
-
- type_content += '<tr class="verbose_output">' + "\n";
- type_content += '<th><abbr title="Range (Start, End)">R</abbr></th>' + "\n";
- type_content += parts['start-end'].join( "\n" ) + "\n";
- type_content += '</tr>' + "\n";
-
- type_content += '</table>' + "\n";
- type_content += '</div>' + "\n";
-
- type_content += '</div>' + "\n";
}
- type_content += '</div>';
- content.push( $.trim( type_content ) );
+
}
}
-
- $( 'h2 span', analysis_result_data )
- .html( field_or_name + ': ' + name );
-
- $( 'h2 .verbose_output a', analysis_result_data )
- .die( 'click' )
- .live
- (
- 'click',
- function( event )
- {
- $( this ).parents( '.block' )
- .toggleClass( 'verbose_output' );
- }
- );
-
- $( '.analysis-result-content', analysis_result_data )
- .html( content.join( "\n" ) );
-
- analysis_element.append( analysis_result_data );
-
}
}
@@ -4161,7 +4297,7 @@ var sammy = $.sammy
for( var key in memory_data )
{
$( '.value.' + key, this )
- .html( memory_data[key] );
+ .text( memory_data[key] );
}
var data = {
@@ -4184,7 +4320,7 @@ var sammy = $.sammy
var value_element = $( '.' + key + ' dd', this );
value_element
- .html( data[key] );
+ .text( data[key] );
value_element.closest( 'li' )
.show();
@@ -4200,7 +4336,7 @@ var sammy = $.sammy
for( var key in commandLineArgs )
{
cmd_arg_element = cmd_arg_element.clone();
- cmd_arg_element.html( commandLineArgs[key] );
+ cmd_arg_element.text( commandLineArgs[key] );
cmd_arg_key_element
.after( cmd_arg_element );
@@ -4247,7 +4383,7 @@ var sammy = $.sammy
var headline = $( '#memory h2 span', this );
headline
- .html( headline.html() + ' (' + memory_percentage + '%)' );
+ .text( headline.html() + ' (' + memory_percentage + '%)' );
$( '#memory-bar .value', this )
.each
@@ -4266,7 +4402,7 @@ var sammy = $.sammy
byte_value = byte_value.toFixed( 2 ) + ' MB';
self
- .html( byte_value );
+ .text( byte_value );
}
);
},
Modified: lucene/dev/branches/flexscoring/solr/webapp/web/tpl/analysis.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/webapp/web/tpl/analysis.html?rev=1160700&r1=1160699&r2=1160700&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/webapp/web/tpl/analysis.html (original)
+++ lucene/dev/branches/flexscoring/solr/webapp/web/tpl/analysis.html Tue Aug 23 14:06:58 2011
@@ -6,70 +6,55 @@
</div>
- <div class="block" id="field-analysis">
-
- <h2><span>Field Analysis</span></h2>
- <div class="content">
-
- <div class="message-container">
- <div class="message"></div>
- </div>
-
- <form method="get">
-
- <ul class="clearfix">
-
- <li class="index">
-
- <label for="analysis_fieldvalue_index">Field Value (Index)</label>
- <textarea name="analysis.fieldvalue" id="analysis_fieldvalue_index"></textarea>
-
- </li>
+ <div id="analysis-holder">
+
+ <div id="field-analysis">
+
+ <form method="get">
- <li class="query">
+ <ul class="clearfix">
- <label for="analysis_fieldvalue_query">Field Value (Query)</label>
- <textarea name="analysis.query" id="analysis_fieldvalue_query"></textarea>
+ <li class="index">
+
+ <label for="analysis_fieldvalue_index">Field Value (Index)</label>
+ <textarea name="analysis.fieldvalue" id="analysis_fieldvalue_index"></textarea>
+
+ </li>
- </li>
+ <li class="query">
+
+ <label for="analysis_fieldvalue_query">Field Value (Query)</label>
+ <textarea name="analysis.query" id="analysis_fieldvalue_query"></textarea>
+
+ </li>
- <li class="settings clearfix">
+ <li class="settings-holder clearfix">
+ <div class="settings">
- <label for="type_or_name">Analyse Fieldname / FieldType:</label>
- <select id="type_or_name"></select>
+ <label for="type_or_name">Analyse Fieldname / FieldType:</label>
+ <select id="type_or_name"></select>
- <div>
+ <div>
- <button type="submit">Analyse Values</button>
+ <button type="submit">Analyse Values</button>
- </div>
+ <div class="verbose_output active">
+ <a>Verbose Output</a>
+ </div>
- </li>
+ </div>
+
+ </div>
+ </li>
+
+ </ul>
- </ul>
+ </form>
- </form>
-
- </div>
- </div>
-
- <div class="block analysis-result">
-
- <h2>
- <span>{headline}</span>
- <div class="verbose_output">
- <a>Verbose Output</a>
- </div>
- </h2>
- <div class="content">
-
- <div class="message-container">
- <div class="message"></div>
</div>
- <div class="analysis-result-content clearfix">{content}</div>
-
- </div>
+ <div id="analysis-result" class="clearfix verbose_output"></div>
+
</div>
</div>
\ No newline at end of file