package GeDBIT.web; import java.util.logging.Level; import GeDBIT.app.BuildVPIndex; import GeDBIT.index.algorithms.PartitionMethod; import GeDBIT.index.algorithms.PartitionMethods; import GeDBIT.index.algorithms.PivotSelectionMethod; import GeDBIT.index.algorithms.PivotSelectionMethods; import com.opensymphony.xwork2.ActionSupport; public class BuildIndex extends ActionSupport { private static final long serialVersionUID = 1855192643060756269L; private String textfield; // 上传的文件 private String data_type; private String build_dpm; private String build_f; private String build_frag; private String build_dim; private String build_v; private String build_m; private String build_psm; private String build_fft_scale; private int pNum = 2; private int sf = 3; private int mls = 100; private int initialSize = 1000; private int finalSize = 1000; private int stepSize = 1000; private Level debug = Level.OFF; private int pathLength = 0; private PartitionMethod dpm = PartitionMethods.valueOf("BALANCED"); private PivotSelectionMethod psm = PivotSelectionMethods.valueOf("FFT"); private int frag = 6; private int dim = 2; private boolean bucket = true; private double maxR = 0.02; private int setA = 10000; private int setN = 50; private int fftScale = 30; private String indexPrefix = "D:/data/index/"+"defaults"; private String fileName = "1m.vector"; private String dataType = "vector"; private String psmName = "fft"; private String forPrint = ""; private String selectAlgorithm = ""; private String testKind = ""; private String yMethod = ""; public String execute() throws Exception { fileName = textfield; if(data_type.equalsIgnoreCase("vector")) indexPrefix = "D:/data/index/" + data_type+ "-dim"+ build_dim + "-v" + build_v + "-f" + build_f + "-m" + build_m + "-" + build_dpm + build_psm + "-index"; else indexPrefix = "D:/data/index/" + data_type+ "-frag"+ build_frag + "-v" + build_v + "-f" + build_f + "-m" + build_m + "-" + build_dpm + build_psm + "-index"; dataType = data_type; if (!build_dim.equals("")) dim = Integer.parseInt(build_dim); frag = Integer.parseInt(build_frag); mls = Integer.parseInt(build_m); pNum = Integer.parseInt(build_v); sf = Integer.parseInt(build_f); if (build_dpm.equalsIgnoreCase("MVPT")) build_dpm = "CLUSTERINGKMEANS"; dpm = PartitionMethods.valueOf(build_dpm.toUpperCase()); psmName = build_psm; fftScale = Integer.valueOf(build_fft_scale); PartitionMethods.pm = build_dpm.toUpperCase(); PartitionMethods.r = maxR; dpm.setMaxRadius(maxR); // hack, if cght, use clustering partition, and set maxr to -1 to denote // it if (dpm == PartitionMethods.CGHT) { dpm = PartitionMethods.CLUSTERINGKMEANS; dpm.setMaxRadius(-2); } if (dpm == PartitionMethods.GHT) { dpm = PartitionMethods.CLUSTERINGKMEANS; dpm.setMaxRadius(-1); } if (psmName.equalsIgnoreCase("incremental")) psm = new GeDBIT.index.algorithms.IncrementalSelection(setA, setN); else if (psmName.equalsIgnoreCase("pcaonfft")) psm = new GeDBIT.index.algorithms.PCAOnFFT(fftScale); else if (psmName.equalsIgnoreCase("selectiononfft")) psm = new GeDBIT.index.algorithms.SelectionOnFFT(fftScale, testKind, yMethod, selectAlgorithm); // psm = new GeDBIT.index.algorithms.SelectionOnFFT(fftScale); else if (psmName.equalsIgnoreCase("eigen")) psm = new GeDBIT.index.algorithms.EigenOnFFT(fftScale); else if (psmName.equalsIgnoreCase("gauss")) psm = new GeDBIT.index.algorithms.GaussOnFFT(fftScale); else psm = PivotSelectionMethods.valueOf(psmName.toUpperCase()); BuildVPIndex.batchBulkLoad(fileName, indexPrefix, dataType, dim, frag, initialSize, finalSize, stepSize, mls, pNum, sf, debug, pathLength, psm, dpm, bucket, forPrint); System.out.println(indexPrefix); return "success"; } public String getData_type() { return data_type; } public void setData_type(String data_type) { this.data_type = data_type; } public String getBuild_f() { return build_f; } public void setBuild_f(String build_f) { this.build_f = build_f; } public String getBuild_frag() { return build_frag; } public void setBuild_frag(String build_frag) { this.build_frag = build_frag; } public String getBuild_dim() { return build_dim; } public void setBuild_dim(String build_dim) { this.build_dim = build_dim; } public String getBuild_v() { return build_v; } public void setBuild_v(String build_v) { this.build_v = build_v; } public String getBuild_m() { return build_m; } public void setBuild_m(String build_m) { this.build_m = build_m; } public String getBuild_dpm() { return build_dpm; } public void setBuild_dpm(String build_dpm) { this.build_dpm = build_dpm; } public String getBuild_psm() { return build_psm; } public void setBuild_psm(String build_psm) { this.build_psm = build_psm; } public String getBuild_fft_scale() { return build_fft_scale; } public void setBuild_fft_scale(String build_fft_scale) { this.build_fft_scale = build_fft_scale; } public String getTextfield() { return textfield; } public void setTextfield(String textfield) { this.textfield = textfield; } }