Changeset 531
- Timestamp:
- 09/22/08 11:52:29 (5 years ago)
- Location:
- trunk
- Files:
-
- 5 modified
-
mpdb-common/src/edu/rpi/metpetdb/client/model/ChemicalAnalysisElement.java (modified) (2 diffs)
-
mpdb-common/src/edu/rpi/metpetdb/client/model/ChemicalAnalysisOxide.java (modified) (2 diffs)
-
mpdb-server/src/edu/rpi/metpetdb/server/search/SearchDb.java (modified) (3 diffs)
-
mpdb-test-server/test-data/test-sample-data.xml (modified) (2 diffs)
-
mpdb-test-server/test/edu/rpi/metpetdb/server/search/HibernateSearchTest.java (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/mpdb-common/src/edu/rpi/metpetdb/client/model/ChemicalAnalysisElement.java
r530 r531 5 5 import org.hibernate.search.annotations.Index; 6 6 import org.hibernate.search.annotations.IndexedEmbedded; 7 import org.hibernate.search.annotations.Store; 7 8 8 9 import edu.rpi.metpetdb.server.search.bridges.FloatBridge; … … 16 17 private Float precision; 17 18 private String precisionUnit; 19 @Field(index = Index.UN_TOKENIZED) 20 @FieldBridge(impl = FloatBridge.class) 18 21 private Float minAmount; 22 @Field(index = Index.UN_TOKENIZED) 23 @FieldBridge(impl = FloatBridge.class) 19 24 private Float maxAmount; 25 @Field(index = Index.TOKENIZED, store = Store.NO) 20 26 private String measurementUnit; 21 27 @IndexedEmbedded(prefix = "element_") -
trunk/mpdb-common/src/edu/rpi/metpetdb/client/model/ChemicalAnalysisOxide.java
r530 r531 5 5 import org.hibernate.search.annotations.Index; 6 6 import org.hibernate.search.annotations.IndexedEmbedded; 7 import org.hibernate.search.annotations.Store; 7 8 8 9 import edu.rpi.metpetdb.server.search.bridges.FloatBridge; … … 16 17 private Float precision; 17 18 private String precisionUnit; 19 @Field(index = Index.UN_TOKENIZED) 20 @FieldBridge(impl = FloatBridge.class) 18 21 private Float minAmount; 22 @Field(index = Index.UN_TOKENIZED) 23 @FieldBridge(impl = FloatBridge.class) 19 24 private Float maxAmount; 25 @Field(index = Index.TOKENIZED, store = Store.NO) 20 26 private String measurementUnit; 21 27 -
trunk/mpdb-server/src/edu/rpi/metpetdb/server/search/SearchDb.java
r523 r531 9 9 import org.apache.lucene.search.BooleanClause; 10 10 import org.apache.lucene.search.BooleanQuery; 11 import org.apache.lucene.search.FilteredQuery; 12 import org.apache.lucene.search.RangeFilter; 11 13 import org.apache.lucene.search.RangeQuery; 12 14 import org.apache.lucene.search.TermQuery; 15 import org.apache.solr.util.NumberUtils; 13 16 import org.hibernate.Session; 14 17 import org.hibernate.search.FullTextSession; … … 17 20 import edu.rpi.metpetdb.client.model.DateSpan; 18 21 import edu.rpi.metpetdb.client.model.Sample; 22 import edu.rpi.metpetdb.client.model.SearchElement; 23 import edu.rpi.metpetdb.client.model.SearchOxide; 19 24 import edu.rpi.metpetdb.client.model.SearchSample; 20 25 import edu.rpi.metpetdb.client.model.User; … … 69 74 // ignore it 70 75 } else { // otherwise, what type of returned data is it? 71 if (methodResult instanceof Set) { // if a set of data is 76 if (columnName.equals("subsample_chemicalAnalysis_oxides")) { 77 if (((Set) methodResult).size() > 0) { 78 final BooleanQuery setQuery = new BooleanQuery(); 79 for (SearchOxide o : (Set<SearchOxide>) methodResult) { 80 final RangeFilter rangeFilterOnMin = new RangeFilter("subsample_chemicalAnalysis_oxides_minAmount", NumberUtils.float2sortableStr(-99999), NumberUtils.float2sortableStr(o 81 .getUpperBound()),true, true); 82 final RangeFilter rangeFilterOnMax = new RangeFilter("subsample_chemicalAnalysis_oxides_minAmount", NumberUtils.float2sortableStr(o 83 .getLowerBound()), NumberUtils.float2sortableStr(99999),true, true); 84 final TermQuery oxideQuery = new TermQuery(new Term("subsample_chemicalAnalysis_oxides_oxide_species", o.getSpecies())); 85 final FilteredQuery filterOnMinQuery = new FilteredQuery(oxideQuery, rangeFilterOnMin); 86 final FilteredQuery filterOnBothQuery = new FilteredQuery(filterOnMinQuery, rangeFilterOnMax); 87 setQuery.add(filterOnBothQuery, BooleanClause.Occur.SHOULD); 88 } 89 // require that one of these results be found in the 90 // full query 91 fullQuery.add(setQuery, BooleanClause.Occur.MUST); 92 } 93 } 94 else if (columnName 95 .equals("subsample_chemicalAnalysis_elements")) { 96 if (((Set) methodResult).size() > 0) { 97 final BooleanQuery setQuery = new BooleanQuery(); 98 for (SearchElement o : (Set<SearchElement>) methodResult) { 99 final RangeFilter rangeFilterOnMin = new RangeFilter("subsample_chemicalAnalysis_elements_minAmount", NumberUtils.float2sortableStr(-99999), NumberUtils.float2sortableStr(o 100 .getUpperBound()),true, true); 101 final RangeFilter rangeFilterOnMax = new RangeFilter("subsample_chemicalAnalysis_elements_minAmount", NumberUtils.float2sortableStr(o 102 .getLowerBound()), NumberUtils.float2sortableStr(99999),true, true); 103 final TermQuery elementQuery = new TermQuery( 104 new Term( 105 "subsample_chemicalAnalysis_elements_element_symbol", 106 o.getElementSymbol())); 107 final FilteredQuery filterOnMinQuery = new FilteredQuery(elementQuery, rangeFilterOnMin); 108 final FilteredQuery filterOnBothQuery = new FilteredQuery(filterOnMinQuery, rangeFilterOnMax); 109 setQuery.add(filterOnBothQuery, BooleanClause.Occur.SHOULD); 110 } 111 // require that one of these results be found in the 112 // full query 113 fullQuery.add(setQuery, BooleanClause.Occur.MUST); 114 } 115 } 116 else if (methodResult instanceof Set) { // if a set of data is 72 117 // returned, it should be an 73 118 // OR query -
trunk/mpdb-test-server/test-data/test-sample-data.xml
r499 r531 308 308 <elements element_id="101" name="Zinc" symbol="Zn" atomic_number="30" weight="65.38"/> 309 309 <elements element_id="102" name="Zirconium" symbol="Zr" atomic_number="40" weight="91.224"/> 310 <chemical_analysis_elements chemical_analysis_id="1" element_id="1" amount="5.0" precision="0.0" precision_type="ABS" />311 <chemical_analysis_elements chemical_analysis_id="1" element_id="14" amount="5.0" precision="0.0" precision_type="ABS" />312 <chemical_analysis_elements chemical_analysis_id="2" element_id="1" amount="10.0" precision="0.0" precision_type="ABS" />313 <chemical_analysis_elements chemical_analysis_id="2" element_id="14" amount="10.0" precision="0.0" precision_type="ABS" /><chemical_analysis_elements chemical_analysis_id="3" element_id="1" amount="6.0"></chemical_analysis_elements>314 <chemical_analysis_elements chemical_analysis_id="3" element_id="14" amount="8" ></chemical_analysis_elements>310 <chemical_analysis_elements chemical_analysis_id="1" element_id="1" amount="5.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="3" max_amount="7"/> 311 <chemical_analysis_elements chemical_analysis_id="1" element_id="14" amount="5.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="3" max_amount="7"/> 312 <chemical_analysis_elements chemical_analysis_id="2" element_id="1" amount="10.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="7" max_amount="13"/> 313 <chemical_analysis_elements chemical_analysis_id="2" element_id="14" amount="10.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="7" max_amount="13"/><chemical_analysis_elements chemical_analysis_id="3" element_id="1" amount="6.0" measurement_unit="ppm" min_amount="4" max_amount="8"></chemical_analysis_elements> 314 <chemical_analysis_elements chemical_analysis_id="3" element_id="14" amount="8" measurement_unit="ppm" min_amount="6" max_amount="10"></chemical_analysis_elements> 315 315 <oxides oxide_id="1" element_id="1" oxidation_state="3" species="Al2O3" weight="101.96" cations_per_oxide="2" conversion_factor="1.8894427663399"/> 316 316 <oxides oxide_id="2" element_id="3" oxidation_state="5" species="Sb2O5" weight="323.517" cations_per_oxide="2" conversion_factor="1.32850279237845"/> … … 354 354 <oxides oxide_id="40" element_id="101" oxidation_state="2" species="ZnO" weight="81.38" cations_per_oxide="1" conversion_factor="1.24472315692872"/> 355 355 <oxides oxide_id="41" element_id="102" oxidation_state="4" species="ZrO2" weight="123.22" cations_per_oxide="1" conversion_factor="1.35074103306148"/> 356 <chemical_analysis_oxides chemical_analysis_id="1" oxide_id="1" amount="10.0" precision="0.0" precision_type="ABS" />357 <chemical_analysis_oxides chemical_analysis_id="1" oxide_id="6" amount="10.0" precision="0.0" precision_type="ABS" />358 <chemical_analysis_oxides chemical_analysis_id="2" oxide_id="1" amount="15.0" precision="0.0" precision_type="ABS" />359 <chemical_analysis_oxides chemical_analysis_id="2" oxide_id="6" amount="15.0" precision="0.0" precision_type="ABS" /><chemical_analysis_oxides chemical_analysis_id="5" oxide_id="1" amount="13.0"></chemical_analysis_oxides>360 <chemical_analysis_oxides chemical_analysis_id="6" oxide_id="6" amount="9" ></chemical_analysis_oxides>356 <chemical_analysis_oxides chemical_analysis_id="1" oxide_id="1" amount="10.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="7" max_amount="12"/> 357 <chemical_analysis_oxides chemical_analysis_id="1" oxide_id="6" amount="10.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="7" max_amount="13"/> 358 <chemical_analysis_oxides chemical_analysis_id="2" oxide_id="1" amount="15.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="12" max_amount="18"/> 359 <chemical_analysis_oxides chemical_analysis_id="2" oxide_id="6" amount="15.0" precision="0.0" precision_type="ABS" measurement_unit="ppm" min_amount="12" max_amount="18"/><chemical_analysis_oxides chemical_analysis_id="5" oxide_id="1" amount="13.0" measurement_unit="ppm" min_amount="11" max_amount="15"></chemical_analysis_oxides> 360 <chemical_analysis_oxides chemical_analysis_id="6" oxide_id="6" amount="9" measurement_unit="ppm" min_amount="7" max_amount="11"></chemical_analysis_oxides> 361 361 <mineral_types mineral_type_id="1" name="Silicates"></mineral_types> 362 362 <mineral_types mineral_type_id="2" name="Oxides"/> -
trunk/mpdb-test-server/test/edu/rpi/metpetdb/server/search/HibernateSearchTest.java
r530 r531 64 64 tx.commit(); // index are written at commit time 65 65 } 66 66 /* 67 67 @Test 68 68 public void testTermSearch() { … … 449 449 } 450 450 } 451 } 451 }*/ 452 452 @Test 453 453 public void testOxideRangeSearch() { … … 480 480 final BooleanQuery setQuery = new BooleanQuery(); 481 481 for (SearchOxide o : (Set<SearchOxide>) methodResult) { 482 final RangeQuery surroundMin = new RangeQuery( 483 new Term( 484 "subsample_chemicalAnalysis_oxides_minAmount", 485 NumberUtils.float2sortableStr(o 486 .getLowerBound())), 487 new Term( 488 "subsample_chemicalAnalysis_oxides_minAmount", 489 NumberUtils.float2sortableStr(o 490 .getUpperBound())), true); 491 final RangeQuery surroundMax = new RangeQuery( 492 new Term( 493 "subsample_chemicalAnalysis_oxides_maxAmount", 494 NumberUtils.float2sortableStr(o 495 .getLowerBound())), 496 new Term( 497 "subsample_chemicalAnalysis_oxides_maxAmount", 498 NumberUtils.float2sortableStr(o 499 .getUpperBound())), true); 500 final RangeQuery minBelowLow = new RangeQuery( 501 new Term( 502 "subsample_chemicalAnalysis_oxides_minAmount", 503 NumberUtils.float2sortableStr(0)), 504 new Term( 505 "subsample_chemicalAnalysis_oxides_minAmount", 506 NumberUtils.float2sortableStr(o 507 .getLowerBound())), true); 508 final RangeQuery maxAboveHigh = new RangeQuery( 509 new Term( 510 "subsample_chemicalAnalysis_oxides_maxAmount", 511 NumberUtils.float2sortableStr(o 512 .getUpperBound())), 513 new Term( 514 "subsample_chemicalAnalysis_oxides_minAmount", 515 NumberUtils.float2sortableStr(9999)), 516 true); 517 final BooleanQuery minMaxSurroundingLowHigh = new BooleanQuery(); 518 minMaxSurroundingLowHigh.add(minBelowLow, 519 BooleanClause.Occur.MUST); 520 minMaxSurroundingLowHigh.add(maxAboveHigh, 521 BooleanClause.Occur.MUST); 522 final BooleanQuery rangeSearches = new BooleanQuery(); 523 rangeSearches.add(surroundMin, 524 BooleanClause.Occur.SHOULD); 525 rangeSearches.add(surroundMax, 526 BooleanClause.Occur.SHOULD); 527 rangeSearches.add(minMaxSurroundingLowHigh, 528 BooleanClause.Occur.SHOULD); 529 530 final TermQuery oxideQuery = new TermQuery( 531 new Term( 532 "subsample_chemicalAnalysis_oxides_oxide_species", 533 o.getSpecies())); 534 final BooleanQuery oxideSetQuery = new BooleanQuery(); 535 oxideSetQuery.add(rangeSearches, BooleanClause.Occur.MUST); 536 oxideSetQuery.add(oxideQuery, BooleanClause.Occur.MUST); 537 setQuery.add(oxideSetQuery, BooleanClause.Occur.SHOULD); 482 final RangeFilter rangeFilterOnMin = new RangeFilter("subsample_chemicalAnalysis_oxides_minAmount", NumberUtils.float2sortableStr(-99999), NumberUtils.float2sortableStr(o 483 .getUpperBound()),true, true); 484 final RangeFilter rangeFilterOnMax = new RangeFilter("subsample_chemicalAnalysis_oxides_minAmount", NumberUtils.float2sortableStr(o 485 .getLowerBound()), NumberUtils.float2sortableStr(99999),true, true); 486 final TermQuery oxideQuery = new TermQuery(new Term("subsample_chemicalAnalysis_oxides_oxide_species", o.getSpecies())); 487 final FilteredQuery filterOnMinQuery = new FilteredQuery(oxideQuery, rangeFilterOnMin); 488 final FilteredQuery filterOnBothQuery = new FilteredQuery(filterOnMinQuery, rangeFilterOnMax); 489 setQuery.add(filterOnBothQuery, BooleanClause.Occur.SHOULD); 538 490 } 539 491 // require that one of these results be found in the … … 675 627 final BooleanQuery setQuery = new BooleanQuery(); 676 628 for (SearchElement o : (Set<SearchElement>) methodResult) { 677 final RangeQuery surroundMin = new RangeQuery( 678 new Term( 679 "subsample_chemicalAnalysis_elements_minAmount", 680 NumberUtils.float2sortableStr(o 681 .getLowerBound())), 682 new Term( 683 "subsample_chemicalAnalysis_elements_minAmount", 684 NumberUtils.float2sortableStr(o 685 .getUpperBound())), true); 686 final RangeQuery surroundMax = new RangeQuery( 687 new Term( 688 "subsample_chemicalAnalysis_elements_maxAmount", 689 NumberUtils.float2sortableStr(o 690 .getLowerBound())), 691 new Term( 692 "subsample_chemicalAnalysis_elements_maxAmount", 693 NumberUtils.float2sortableStr(o 694 .getUpperBound())), true); 695 final RangeQuery minBelowLow = new RangeQuery( 696 new Term( 697 "subsample_chemicalAnalysis_elements_minAmount", 698 NumberUtils.float2sortableStr(0)), 699 new Term( 700 "subsample_chemicalAnalysis_elements_minAmount", 701 NumberUtils.float2sortableStr(o 702 .getLowerBound())), true); 703 final RangeQuery maxAboveHigh = new RangeQuery( 704 new Term( 705 "subsample_chemicalAnalysis_elements_maxAmount", 706 NumberUtils.float2sortableStr(o 707 .getUpperBound())), 708 new Term( 709 "subsample_chemicalAnalysis_elements_minAmount", 710 NumberUtils.float2sortableStr(9999)), 711 true); 712 final BooleanQuery minMaxSurroundingLowHigh = new BooleanQuery(); 713 minMaxSurroundingLowHigh.add(minBelowLow, 714 BooleanClause.Occur.MUST); 715 minMaxSurroundingLowHigh.add(maxAboveHigh, 716 BooleanClause.Occur.MUST); 717 final BooleanQuery rangeSearches = new BooleanQuery(); 718 rangeSearches.add(surroundMin, 719 BooleanClause.Occur.SHOULD); 720 rangeSearches.add(surroundMax, 721 BooleanClause.Occur.SHOULD); 722 rangeSearches.add(minMaxSurroundingLowHigh, 723 BooleanClause.Occur.SHOULD); 724 629 final RangeFilter rangeFilterOnMin = new RangeFilter("subsample_chemicalAnalysis_elements_minAmount", NumberUtils.float2sortableStr(-99999), NumberUtils.float2sortableStr(o 630 .getUpperBound()),true, true); 631 final RangeFilter rangeFilterOnMax = new RangeFilter("subsample_chemicalAnalysis_elements_minAmount", NumberUtils.float2sortableStr(o 632 .getLowerBound()), NumberUtils.float2sortableStr(99999),true, true); 725 633 final TermQuery elementQuery = new TermQuery( 726 634 new Term( 727 635 "subsample_chemicalAnalysis_elements_element_symbol", 728 636 o.getElementSymbol())); 729 final BooleanQuery elementSetQuery = new BooleanQuery(); 730 elementSetQuery.add(rangeSearches, BooleanClause.Occur.MUST); 731 elementSetQuery.add(elementQuery, BooleanClause.Occur.MUST); 732 setQuery.add(elementSetQuery, BooleanClause.Occur.SHOULD); 637 final FilteredQuery filterOnMinQuery = new FilteredQuery(elementQuery, rangeFilterOnMin); 638 final FilteredQuery filterOnBothQuery = new FilteredQuery(filterOnMinQuery, rangeFilterOnMax); 639 setQuery.add(filterOnBothQuery, BooleanClause.Occur.SHOULD); 733 640 } 734 641 // require that one of these results be found in the … … 750 657 751 658 } 752 659 /* 753 660 @Test 754 661 public void testSampleSearch() { … … 763 670 final SearchSample searchSamp = new SearchSample(); 764 671 // searchSamp.setAlias("1"); 765 /*final RockType rockType1 = new RockType();672 final RockType rockType1 = new RockType(); 766 673 rockType1.setRockType("type 2"); 767 674 final RockType rockType2 = new RockType(); … … 769 676 searchSamp.addPossibleRockType(rockType1); 770 677 searchSamp.addPossibleRockType(rockType2); 771 */Oxide tempOxide = new Oxide();678 Oxide tempOxide = new Oxide(); 772 679 tempOxide.setSpecies("al2o3"); 773 680 searchSamp.addOxide(tempOxide, 9f, 17f); 774 681 775 /*776 *final Calendar rightNow = Calendar.getInstance(); rightNow.set(2008,777 *7, 25); final Date firstDate = rightNow.getTime(); rightNow.set(2008,778 *8, 1); final Date secondDate = rightNow.getTime();779 *780 *searchSamp.setCollectionDateRange(new DateSpan(firstDate,781 *secondDate));782 */682 683 final Calendar rightNow = Calendar.getInstance(); rightNow.set(2008, 684 7, 25); final Date firstDate = rightNow.getTime(); rightNow.set(2008, 685 8, 1); final Date secondDate = rightNow.getTime(); 686 687 searchSamp.setCollectionDateRange(new DateSpan(firstDate, 688 secondDate)); 689 783 690 // Actual Search Functionality 784 691 final Session session = InitDatabase.getSession(); … … 789 696 BooleanQuery fullQuery = new BooleanQuery(); 790 697 791 /*792 *// Check if it's public data or if the user is this user BooleanQuery793 *privacyQuery = new BooleanQuery(); // Is this public data? final794 *TermQuery termQuery = new TermQuery(new Term("publicData",795 *Boolean.TRUE.toString())); privacyQuery.add(termQuery,796 *BooleanClause.Occur.SHOULD); // Is this the current user? final797 *TermQuery termQuery2 = new TermQuery(new Term( "user_emailAddress",798 *testUser.getEmailAddress())); privacyQuery.add(termQuery2,799 *BooleanClause.Occur.SHOULD);800 *801 *// in the full query, make it mandatory that the privacy requirements802 *// are met fullQuery.add(privacyQuery, BooleanClause.Occur.MUST);803 */698 699 // Check if it's public data or if the user is this user BooleanQuery 700 privacyQuery = new BooleanQuery(); // Is this public data? final 701 TermQuery termQuery = new TermQuery(new Term("publicData", 702 Boolean.TRUE.toString())); privacyQuery.add(termQuery, 703 BooleanClause.Occur.SHOULD); // Is this the current user? final 704 TermQuery termQuery2 = new TermQuery(new Term( "user_emailAddress", 705 testUser.getEmailAddress())); privacyQuery.add(termQuery2, 706 BooleanClause.Occur.SHOULD); 707 708 // in the full query, make it mandatory that the privacy requirements 709 // are met fullQuery.add(privacyQuery, BooleanClause.Occur.MUST); 710 804 711 // Actual Search 805 712 String columnName; … … 938 845 assertEquals(1, results.size()); 939 846 } 940 847 */ 941 848 }
